1# Record/replay test that boots a Linux kernel 2# 3# Copyright (c) 2020 ISP RAS 4# 5# Author: 6# Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru> 7# 8# This work is licensed under the terms of the GNU GPL, version 2 or 9# later. See the COPYING file in the top-level directory. 10 11import os 12import lzma 13import shutil 14import logging 15import time 16 17from avocado import skip 18from avocado import skipIf 19from avocado import skipUnless 20from avocado_qemu import wait_for_console_pattern 21from avocado.utils import archive 22from avocado.utils import process 23from boot_linux_console import LinuxKernelTest 24 25class ReplayKernelBase(LinuxKernelTest): 26 """ 27 Boots a Linux kernel in record mode and checks that the console 28 is operational and the kernel command line is properly passed 29 from QEMU to the kernel. 30 Then replays the same scenario and verifies, that QEMU correctly 31 terminates. 32 """ 33 34 timeout = 120 35 KERNEL_COMMON_COMMAND_LINE = 'printk.time=1 panic=-1 ' 36 37 def run_vm(self, kernel_path, kernel_command_line, console_pattern, 38 record, shift, args, replay_path): 39 logger = logging.getLogger('replay') 40 start_time = time.time() 41 vm = self.get_vm() 42 vm.set_console() 43 if record: 44 logger.info('recording the execution...') 45 mode = 'record' 46 else: 47 logger.info('replaying the execution...') 48 mode = 'replay' 49 vm.add_args('-icount', 'shift=%s,rr=%s,rrfile=%s' % 50 (shift, mode, replay_path), 51 '-kernel', kernel_path, 52 '-append', kernel_command_line, 53 '-net', 'none', 54 '-no-reboot') 55 if args: 56 vm.add_args(*args) 57 vm.launch() 58 self.wait_for_console_pattern(console_pattern, vm) 59 if record: 60 vm.shutdown() 61 logger.info('finished the recording with log size %s bytes' 62 % os.path.getsize(replay_path)) 63 else: 64 vm.wait() 65 logger.info('successfully finished the replay') 66 elapsed = time.time() - start_time 67 logger.info('elapsed time %.2f sec' % elapsed) 68 return elapsed 69 70 def run_rr(self, kernel_path, kernel_command_line, console_pattern, 71 shift=7, args=None): 72 replay_path = os.path.join(self.workdir, 'replay.bin') 73 t1 = self.run_vm(kernel_path, kernel_command_line, console_pattern, 74 True, shift, args, replay_path) 75 t2 = self.run_vm(kernel_path, kernel_command_line, console_pattern, 76 False, shift, args, replay_path) 77 logger = logging.getLogger('replay') 78 logger.info('replay overhead {:.2%}'.format(t2 / t1 - 1)) 79 80class ReplayKernelNormal(ReplayKernelBase): 81 @skipIf(os.getenv('GITLAB_CI'), 'Running on GitLab') 82 def test_x86_64_pc(self): 83 """ 84 :avocado: tags=arch:x86_64 85 :avocado: tags=machine:pc 86 """ 87 kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' 88 '/linux/releases/29/Everything/x86_64/os/images/pxeboot' 89 '/vmlinuz') 90 kernel_hash = '23bebd2680757891cf7adedb033532163a792495' 91 kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 92 93 kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 94 console_pattern = 'VFS: Cannot open root device' 95 96 self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) 97 98 def test_mips_malta(self): 99 """ 100 :avocado: tags=arch:mips 101 :avocado: tags=machine:malta 102 :avocado: tags=endian:big 103 """ 104 deb_url = ('http://snapshot.debian.org/archive/debian/' 105 '20130217T032700Z/pool/main/l/linux-2.6/' 106 'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb') 107 deb_hash = 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04' 108 deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 109 kernel_path = self.extract_from_deb(deb_path, 110 '/boot/vmlinux-2.6.32-5-4kc-malta') 111 kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 112 console_pattern = 'Kernel command line: %s' % kernel_command_line 113 114 self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) 115 116 def test_mips64el_malta(self): 117 """ 118 This test requires the ar tool to extract "data.tar.gz" from 119 the Debian package. 120 121 The kernel can be rebuilt using this Debian kernel source [1] and 122 following the instructions on [2]. 123 124 [1] http://snapshot.debian.org/package/linux-2.6/2.6.32-48/ 125 #linux-source-2.6.32_2.6.32-48 126 [2] https://kernel-team.pages.debian.net/kernel-handbook/ 127 ch-common-tasks.html#s-common-official 128 129 :avocado: tags=arch:mips64el 130 :avocado: tags=machine:malta 131 """ 132 deb_url = ('http://snapshot.debian.org/archive/debian/' 133 '20130217T032700Z/pool/main/l/linux-2.6/' 134 'linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb') 135 deb_hash = '1aaec92083bf22fda31e0d27fa8d9a388e5fc3d5' 136 deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 137 kernel_path = self.extract_from_deb(deb_path, 138 '/boot/vmlinux-2.6.32-5-5kc-malta') 139 kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 140 console_pattern = 'Kernel command line: %s' % kernel_command_line 141 self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) 142 143 def test_aarch64_virt(self): 144 """ 145 :avocado: tags=arch:aarch64 146 :avocado: tags=machine:virt 147 :avocado: tags=cpu:cortex-a53 148 """ 149 kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' 150 '/linux/releases/29/Everything/aarch64/os/images/pxeboot' 151 '/vmlinuz') 152 kernel_hash = '8c73e469fc6ea06a58dc83a628fc695b693b8493' 153 kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 154 155 kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 156 'console=ttyAMA0') 157 console_pattern = 'VFS: Cannot open root device' 158 159 self.run_rr(kernel_path, kernel_command_line, console_pattern) 160 161 def test_arm_virt(self): 162 """ 163 :avocado: tags=arch:arm 164 :avocado: tags=machine:virt 165 """ 166 kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' 167 '/linux/releases/29/Everything/armhfp/os/images/pxeboot' 168 '/vmlinuz') 169 kernel_hash = 'e9826d741b4fb04cadba8d4824d1ed3b7fb8b4d4' 170 kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 171 172 kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 173 'console=ttyAMA0') 174 console_pattern = 'VFS: Cannot open root device' 175 176 self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=1) 177 178 @skipIf(os.getenv('GITLAB_CI'), 'Running on GitLab') 179 def test_arm_cubieboard_initrd(self): 180 """ 181 :avocado: tags=arch:arm 182 :avocado: tags=machine:cubieboard 183 """ 184 deb_url = ('https://apt.armbian.com/pool/main/l/' 185 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') 186 deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 187 deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 188 kernel_path = self.extract_from_deb(deb_path, 189 '/boot/vmlinuz-5.10.16-sunxi') 190 dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb' 191 dtb_path = self.extract_from_deb(deb_path, dtb_path) 192 initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 193 '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 194 'arm/rootfs-armv5.cpio.gz') 195 initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' 196 initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 197 initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 198 archive.gzip_uncompress(initrd_path_gz, initrd_path) 199 200 kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 201 'console=ttyS0,115200 ' 202 'usbcore.nousb ' 203 'panic=-1 noreboot') 204 console_pattern = 'Boot successful.' 205 self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=1, 206 args=('-dtb', dtb_path, 207 '-initrd', initrd_path, 208 '-no-reboot')) 209 210 def test_s390x_s390_ccw_virtio(self): 211 """ 212 :avocado: tags=arch:s390x 213 :avocado: tags=machine:s390-ccw-virtio 214 """ 215 kernel_url = ('https://archives.fedoraproject.org/pub/archive' 216 '/fedora-secondary/releases/29/Everything/s390x/os/images' 217 '/kernel.img') 218 kernel_hash = 'e8e8439103ef8053418ef062644ffd46a7919313' 219 kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 220 221 kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=sclp0' 222 console_pattern = 'Kernel command line: %s' % kernel_command_line 223 self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=9) 224 225 def test_alpha_clipper(self): 226 """ 227 :avocado: tags=arch:alpha 228 :avocado: tags=machine:clipper 229 """ 230 kernel_url = ('http://archive.debian.org/debian/dists/lenny/main/' 231 'installer-alpha/20090123lenny10/images/cdrom/vmlinuz') 232 kernel_hash = '3a943149335529e2ed3e74d0d787b85fb5671ba3' 233 kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 234 235 uncompressed_kernel = archive.uncompress(kernel_path, self.workdir) 236 237 kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 238 console_pattern = 'Kernel command line: %s' % kernel_command_line 239 self.run_rr(uncompressed_kernel, kernel_command_line, console_pattern, shift=9, 240 args=('-nodefaults', )) 241 242 def test_ppc64_pseries(self): 243 """ 244 :avocado: tags=arch:ppc64 245 :avocado: tags=machine:pseries 246 """ 247 kernel_url = ('https://archives.fedoraproject.org/pub/archive' 248 '/fedora-secondary/releases/29/Everything/ppc64le/os' 249 '/ppc/ppc64/vmlinuz') 250 kernel_hash = '3fe04abfc852b66653b8c3c897a59a689270bc77' 251 kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 252 253 kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=hvc0' 254 # icount is not good enough for PPC64 for complete boot yet 255 console_pattern = 'Kernel command line: %s' % kernel_command_line 256 self.run_rr(kernel_path, kernel_command_line, console_pattern) 257 258 def test_m68k_q800(self): 259 """ 260 :avocado: tags=arch:m68k 261 :avocado: tags=machine:q800 262 """ 263 deb_url = ('https://snapshot.debian.org/archive/debian-ports' 264 '/20191021T083923Z/pool-m68k/main' 265 '/l/linux/kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb') 266 deb_hash = '044954bb9be4160a3ce81f8bc1b5e856b75cccd1' 267 deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 268 kernel_path = self.extract_from_deb(deb_path, 269 '/boot/vmlinux-5.3.0-1-m68k') 270 271 kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 272 'console=ttyS0 vga=off') 273 console_pattern = 'No filesystem could mount root' 274 self.run_rr(kernel_path, kernel_command_line, console_pattern) 275 276 def do_test_advcal_2018(self, file_path, kernel_name, args=None): 277 archive.extract(file_path, self.workdir) 278 279 for entry in os.scandir(self.workdir): 280 if entry.name.startswith('day') and entry.is_dir(): 281 kernel_path = os.path.join(entry.path, kernel_name) 282 break 283 284 kernel_command_line = '' 285 console_pattern = 'QEMU advent calendar' 286 self.run_rr(kernel_path, kernel_command_line, console_pattern, 287 args=args) 288 289 def test_arm_vexpressa9(self): 290 """ 291 :avocado: tags=arch:arm 292 :avocado: tags=machine:vexpress-a9 293 """ 294 tar_hash = '32b7677ce8b6f1471fb0059865f451169934245b' 295 tar_url = ('https://www.qemu-advent-calendar.org' 296 '/2018/download/day16.tar.xz') 297 file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 298 dtb_path = self.workdir + '/day16/vexpress-v2p-ca9.dtb' 299 self.do_test_advcal_2018(file_path, 'winter.zImage', 300 args=('-dtb', dtb_path)) 301 302 def test_m68k_mcf5208evb(self): 303 """ 304 :avocado: tags=arch:m68k 305 :avocado: tags=machine:mcf5208evb 306 """ 307 tar_hash = 'ac688fd00561a2b6ce1359f9ff6aa2b98c9a570c' 308 tar_url = ('https://www.qemu-advent-calendar.org' 309 '/2018/download/day07.tar.xz') 310 file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 311 self.do_test_advcal_2018(file_path, 'sanity-clause.elf') 312 313 @skip("Test currently broken") # Console stuck as of 5.2-rc1 314 def test_microblaze_s3adsp1800(self): 315 """ 316 :avocado: tags=arch:microblaze 317 :avocado: tags=machine:petalogix-s3adsp1800 318 """ 319 tar_hash = '08bf3e3bfb6b6c7ce1e54ab65d54e189f2caf13f' 320 tar_url = ('https://www.qemu-advent-calendar.org' 321 '/2018/download/day17.tar.xz') 322 file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 323 self.do_test_advcal_2018(file_path, 'ballerina.bin') 324 325 def test_ppc64_e500(self): 326 """ 327 :avocado: tags=arch:ppc64 328 :avocado: tags=machine:ppce500 329 :avocado: tags=cpu:e5500 330 """ 331 tar_hash = '6951d86d644b302898da2fd701739c9406527fe1' 332 tar_url = ('https://www.qemu-advent-calendar.org' 333 '/2018/download/day19.tar.xz') 334 file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 335 self.do_test_advcal_2018(file_path, 'uImage') 336 337 def test_or1k_sim(self): 338 """ 339 :avocado: tags=arch:or1k 340 :avocado: tags=machine:or1k-sim 341 """ 342 tar_hash = '20334cdaf386108c530ff0badaecc955693027dd' 343 tar_url = ('https://www.qemu-advent-calendar.org' 344 '/2018/download/day20.tar.xz') 345 file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 346 self.do_test_advcal_2018(file_path, 'vmlinux') 347 348 def test_nios2_10m50(self): 349 """ 350 :avocado: tags=arch:nios2 351 :avocado: tags=machine:10m50-ghrd 352 """ 353 tar_hash = 'e4251141726c412ac0407c5a6bceefbbff018918' 354 tar_url = ('https://www.qemu-advent-calendar.org' 355 '/2018/download/day14.tar.xz') 356 file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 357 self.do_test_advcal_2018(file_path, 'vmlinux.elf') 358 359 def test_ppc_g3beige(self): 360 """ 361 :avocado: tags=arch:ppc 362 :avocado: tags=machine:g3beige 363 """ 364 tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' 365 tar_url = ('https://www.qemu-advent-calendar.org' 366 '/2018/download/day15.tar.xz') 367 file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 368 self.do_test_advcal_2018(file_path, 'invaders.elf', 369 args=('-M', 'graphics=off')) 370 371 def test_ppc_mac99(self): 372 """ 373 :avocado: tags=arch:ppc 374 :avocado: tags=machine:mac99 375 """ 376 tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' 377 tar_url = ('https://www.qemu-advent-calendar.org' 378 '/2018/download/day15.tar.xz') 379 file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 380 self.do_test_advcal_2018(file_path, 'invaders.elf', 381 args=('-M', 'graphics=off')) 382 383 def test_sparc_ss20(self): 384 """ 385 :avocado: tags=arch:sparc 386 :avocado: tags=machine:SS-20 387 """ 388 tar_hash = 'b18550d5d61c7615d989a06edace051017726a9f' 389 tar_url = ('https://www.qemu-advent-calendar.org' 390 '/2018/download/day11.tar.xz') 391 file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 392 self.do_test_advcal_2018(file_path, 'zImage.elf') 393 394 def test_xtensa_lx60(self): 395 """ 396 :avocado: tags=arch:xtensa 397 :avocado: tags=machine:lx60 398 :avocado: tags=cpu:dc233c 399 """ 400 tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34' 401 tar_url = ('https://www.qemu-advent-calendar.org' 402 '/2018/download/day02.tar.xz') 403 file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 404 self.do_test_advcal_2018(file_path, 'santas-sleigh-ride.elf') 405 406@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout') 407class ReplayKernelSlow(ReplayKernelBase): 408 # Override the timeout, because this kernel includes an inner 409 # loop which is executed with TB recompilings during replay, 410 # making it very slow. 411 timeout = 180 412 413 def test_mips_malta_cpio(self): 414 """ 415 :avocado: tags=arch:mips 416 :avocado: tags=machine:malta 417 :avocado: tags=endian:big 418 :avocado: tags=slowness:high 419 """ 420 deb_url = ('http://snapshot.debian.org/archive/debian/' 421 '20160601T041800Z/pool/main/l/linux/' 422 'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb') 423 deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8' 424 deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 425 kernel_path = self.extract_from_deb(deb_path, 426 '/boot/vmlinux-4.5.0-2-4kc-malta') 427 initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 428 '8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/' 429 'mips/rootfs.cpio.gz') 430 initrd_hash = 'bf806e17009360a866bf537f6de66590de349a99' 431 initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 432 initrd_path = self.workdir + "rootfs.cpio" 433 archive.gzip_uncompress(initrd_path_gz, initrd_path) 434 435 kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 436 'console=ttyS0 console=tty ' 437 'rdinit=/sbin/init noreboot') 438 console_pattern = 'Boot successful.' 439 self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5, 440 args=('-initrd', initrd_path)) 441 442 @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code') 443 def test_mips64el_malta_5KEc_cpio(self): 444 """ 445 :avocado: tags=arch:mips64el 446 :avocado: tags=machine:malta 447 :avocado: tags=endian:little 448 :avocado: tags=slowness:high 449 :avocado: tags=cpu:5KEc 450 """ 451 kernel_url = ('https://github.com/philmd/qemu-testing-blob/' 452 'raw/9ad2df38/mips/malta/mips64el/' 453 'vmlinux-3.19.3.mtoman.20150408') 454 kernel_hash = '00d1d268fb9f7d8beda1de6bebcc46e884d71754' 455 kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 456 initrd_url = ('https://github.com/groeck/linux-build-test/' 457 'raw/8584a59e/rootfs/' 458 'mipsel64/rootfs.mipsel64r1.cpio.gz') 459 initrd_hash = '1dbb8a396e916847325284dbe2151167' 460 initrd_path_gz = self.fetch_asset(initrd_url, algorithm='md5', 461 asset_hash=initrd_hash) 462 initrd_path = self.workdir + "rootfs.cpio" 463 archive.gzip_uncompress(initrd_path_gz, initrd_path) 464 465 kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 466 'console=ttyS0 console=tty ' 467 'rdinit=/sbin/init noreboot') 468 console_pattern = 'Boot successful.' 469 self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5, 470 args=('-initrd', initrd_path)) 471 472 def do_test_mips_malta32el_nanomips(self, kernel_path_xz): 473 kernel_path = self.workdir + "kernel" 474 with lzma.open(kernel_path_xz, 'rb') as f_in: 475 with open(kernel_path, 'wb') as f_out: 476 shutil.copyfileobj(f_in, f_out) 477 478 kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 479 'mem=256m@@0x0 ' 480 'console=ttyS0') 481 console_pattern = 'Kernel command line: %s' % kernel_command_line 482 self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) 483 484 def test_mips_malta32el_nanomips_4k(self): 485 """ 486 :avocado: tags=arch:mipsel 487 :avocado: tags=machine:malta 488 :avocado: tags=endian:little 489 :avocado: tags=cpu:I7200 490 """ 491 kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/' 492 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 493 'generic_nano32r6el_page4k.xz') 494 kernel_hash = '477456aafd2a0f1ddc9482727f20fe9575565dd6' 495 kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 496 self.do_test_mips_malta32el_nanomips(kernel_path_xz) 497 498 def test_mips_malta32el_nanomips_16k_up(self): 499 """ 500 :avocado: tags=arch:mipsel 501 :avocado: tags=machine:malta 502 :avocado: tags=endian:little 503 :avocado: tags=cpu:I7200 504 """ 505 kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/' 506 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 507 'generic_nano32r6el_page16k_up.xz') 508 kernel_hash = 'e882868f944c71c816e832e2303b7874d044a7bc' 509 kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 510 self.do_test_mips_malta32el_nanomips(kernel_path_xz) 511 512 def test_mips_malta32el_nanomips_64k_dbg(self): 513 """ 514 :avocado: tags=arch:mipsel 515 :avocado: tags=machine:malta 516 :avocado: tags=endian:little 517 :avocado: tags=cpu:I7200 518 """ 519 kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/' 520 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 521 'generic_nano32r6el_page64k_dbg.xz') 522 kernel_hash = '18d1c68f2e23429e266ca39ba5349ccd0aeb7180' 523 kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 524 self.do_test_mips_malta32el_nanomips(kernel_path_xz) 525