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