xref: /qemu/tests/avocado/replay_kernel.py (revision 727385c4)
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