xref: /openbmc/qemu/tests/avocado/replay_kernel.py (revision 1098cc3f)
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        # icount requires TCG to be available
40        self.require_accelerator('tcg')
41
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
72
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))
82
83class 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)
95
96        kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
97        console_pattern = 'VFS: Cannot open root device'
98
99        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5)
100
101    def test_mips_malta(self):
102        """
103        :avocado: tags=arch:mips
104        :avocado: tags=machine:malta
105        :avocado: tags=endian:big
106        """
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
116
117        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5)
118
119    def test_mips64el_malta(self):
120        """
121        This test requires the ar tool to extract "data.tar.gz" from
122        the Debian package.
123
124        The kernel can be rebuilt using this Debian kernel source [1] and
125        following the instructions on [2].
126
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
131
132        :avocado: tags=arch:mips64el
133        :avocado: tags=machine:malta
134        """
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)
145
146    def test_aarch64_virt(self):
147        """
148        :avocado: tags=arch:aarch64
149        :avocado: tags=machine:virt
150        :avocado: tags=cpu:cortex-a53
151        """
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)
157
158        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
159                               'console=ttyAMA0')
160        console_pattern = 'VFS: Cannot open root device'
161
162        self.run_rr(kernel_path, kernel_command_line, console_pattern)
163
164    def test_arm_virt(self):
165        """
166        :avocado: tags=arch:arm
167        :avocado: tags=machine:virt
168        """
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)
174
175        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
176                               'console=ttyAMA0')
177        console_pattern = 'VFS: Cannot open root device'
178
179        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=1)
180
181    @skipIf(os.getenv('GITLAB_CI'), 'Running on GitLab')
182    def test_arm_cubieboard_initrd(self):
183        """
184        :avocado: tags=arch:arm
185        :avocado: tags=machine:cubieboard
186        """
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)
202
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'))
212
213    def test_s390x_s390_ccw_virtio(self):
214        """
215        :avocado: tags=arch:s390x
216        :avocado: tags=machine:s390-ccw-virtio
217        """
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)
223
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)
227
228    def test_alpha_clipper(self):
229        """
230        :avocado: tags=arch:alpha
231        :avocado: tags=machine:clipper
232        """
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)
237
238        uncompressed_kernel = archive.uncompress(kernel_path, self.workdir)
239
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', ))
244
245    def test_ppc64_pseries(self):
246        """
247        :avocado: tags=arch:ppc64
248        :avocado: tags=machine:pseries
249        :avocado: tags=accel:tcg
250        """
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)
256
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)
261
262    def test_m68k_q800(self):
263        """
264        :avocado: tags=arch:m68k
265        :avocado: tags=machine:q800
266        """
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')
274
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)
279
280    def do_test_advcal_2018(self, file_path, kernel_name, args=None):
281        archive.extract(file_path, self.workdir)
282
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
287
288        kernel_command_line = ''
289        console_pattern = 'QEMU advent calendar'
290        self.run_rr(kernel_path, kernel_command_line, console_pattern,
291                    args=args)
292
293    def test_arm_vexpressa9(self):
294        """
295        :avocado: tags=arch:arm
296        :avocado: tags=machine:vexpress-a9
297        """
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))
305
306    def test_m68k_mcf5208evb(self):
307        """
308        :avocado: tags=arch:m68k
309        :avocado: tags=machine:mcf5208evb
310        """
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')
316
317    @skip("Test currently broken") # Console stuck as of 5.2-rc1
318    def test_microblaze_s3adsp1800(self):
319        """
320        :avocado: tags=arch:microblaze
321        :avocado: tags=machine:petalogix-s3adsp1800
322        """
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')
328
329    def test_ppc64_e500(self):
330        """
331        :avocado: tags=arch:ppc64
332        :avocado: tags=machine:ppce500
333        :avocado: tags=cpu:e5500
334        """
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')
340
341    def test_or1k_sim(self):
342        """
343        :avocado: tags=arch:or1k
344        :avocado: tags=machine:or1k-sim
345        """
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')
351
352    @skip("nios2 emulation is buggy under record/replay")
353    def test_nios2_10m50(self):
354        """
355        :avocado: tags=arch:nios2
356        :avocado: tags=machine:10m50-ghrd
357        """
358        tar_hash = 'e4251141726c412ac0407c5a6bceefbbff018918'
359        tar_url = ('https://qemu-advcal.gitlab.io'
360                   '/qac-best-of-multiarch/download/day14.tar.xz')
361        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
362        self.do_test_advcal_2018(file_path, 'vmlinux.elf')
363
364    def test_ppc_g3beige(self):
365        """
366        :avocado: tags=arch:ppc
367        :avocado: tags=machine:g3beige
368        """
369        tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc'
370        tar_url = ('https://qemu-advcal.gitlab.io'
371                   '/qac-best-of-multiarch/download/day15.tar.xz')
372        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
373        self.do_test_advcal_2018(file_path, 'invaders.elf',
374                                 args=('-M', 'graphics=off'))
375
376    def test_ppc_mac99(self):
377        """
378        :avocado: tags=arch:ppc
379        :avocado: tags=machine:mac99
380        """
381        tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc'
382        tar_url = ('https://qemu-advcal.gitlab.io'
383                   '/qac-best-of-multiarch/download/day15.tar.xz')
384        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
385        self.do_test_advcal_2018(file_path, 'invaders.elf',
386                                 args=('-M', 'graphics=off'))
387
388    def test_sparc_ss20(self):
389        """
390        :avocado: tags=arch:sparc
391        :avocado: tags=machine:SS-20
392        """
393        tar_hash = 'b18550d5d61c7615d989a06edace051017726a9f'
394        tar_url = ('https://qemu-advcal.gitlab.io'
395                   '/qac-best-of-multiarch/download/day11.tar.xz')
396        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
397        self.do_test_advcal_2018(file_path, 'zImage.elf')
398
399    def test_xtensa_lx60(self):
400        """
401        :avocado: tags=arch:xtensa
402        :avocado: tags=machine:lx60
403        :avocado: tags=cpu:dc233c
404        """
405        tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34'
406        tar_url = ('https://qemu-advcal.gitlab.io'
407                   '/qac-best-of-multiarch/download/day02.tar.xz')
408        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
409        self.do_test_advcal_2018(file_path, 'santas-sleigh-ride.elf')
410
411@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
412class ReplayKernelSlow(ReplayKernelBase):
413    # Override the timeout, because this kernel includes an inner
414    # loop which is executed with TB recompilings during replay,
415    # making it very slow.
416    timeout = 180
417
418    def test_mips_malta_cpio(self):
419        """
420        :avocado: tags=arch:mips
421        :avocado: tags=machine:malta
422        :avocado: tags=endian:big
423        :avocado: tags=slowness:high
424        """
425        deb_url = ('http://snapshot.debian.org/archive/debian/'
426                   '20160601T041800Z/pool/main/l/linux/'
427                   'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb')
428        deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8'
429        deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
430        kernel_path = self.extract_from_deb(deb_path,
431                                            '/boot/vmlinux-4.5.0-2-4kc-malta')
432        initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
433                      '8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/'
434                      'mips/rootfs.cpio.gz')
435        initrd_hash = 'bf806e17009360a866bf537f6de66590de349a99'
436        initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
437        initrd_path = self.workdir + "rootfs.cpio"
438        archive.gzip_uncompress(initrd_path_gz, initrd_path)
439
440        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
441                               'console=ttyS0 console=tty '
442                               'rdinit=/sbin/init noreboot')
443        console_pattern = 'Boot successful.'
444        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5,
445                    args=('-initrd', initrd_path))
446
447    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
448    def test_mips64el_malta_5KEc_cpio(self):
449        """
450        :avocado: tags=arch:mips64el
451        :avocado: tags=machine:malta
452        :avocado: tags=endian:little
453        :avocado: tags=slowness:high
454        :avocado: tags=cpu:5KEc
455        """
456        kernel_url = ('https://github.com/philmd/qemu-testing-blob/'
457                      'raw/9ad2df38/mips/malta/mips64el/'
458                      'vmlinux-3.19.3.mtoman.20150408')
459        kernel_hash = '00d1d268fb9f7d8beda1de6bebcc46e884d71754'
460        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
461        initrd_url = ('https://github.com/groeck/linux-build-test/'
462                      'raw/8584a59e/rootfs/'
463                      'mipsel64/rootfs.mipsel64r1.cpio.gz')
464        initrd_hash = '1dbb8a396e916847325284dbe2151167'
465        initrd_path_gz = self.fetch_asset(initrd_url, algorithm='md5',
466                                          asset_hash=initrd_hash)
467        initrd_path = self.workdir + "rootfs.cpio"
468        archive.gzip_uncompress(initrd_path_gz, initrd_path)
469
470        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
471                               'console=ttyS0 console=tty '
472                               'rdinit=/sbin/init noreboot')
473        console_pattern = 'Boot successful.'
474        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5,
475                    args=('-initrd', initrd_path))
476
477    def do_test_mips_malta32el_nanomips(self, kernel_path_xz):
478        kernel_path = self.workdir + "kernel"
479        with lzma.open(kernel_path_xz, 'rb') as f_in:
480            with open(kernel_path, 'wb') as f_out:
481                shutil.copyfileobj(f_in, f_out)
482
483        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
484                               'mem=256m@@0x0 '
485                               'console=ttyS0')
486        console_pattern = 'Kernel command line: %s' % kernel_command_line
487        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5)
488
489    def test_mips_malta32el_nanomips_4k(self):
490        """
491        :avocado: tags=arch:mipsel
492        :avocado: tags=machine:malta
493        :avocado: tags=endian:little
494        :avocado: tags=cpu:I7200
495        """
496        kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/'
497                      'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
498                      'generic_nano32r6el_page4k.xz')
499        kernel_hash = '477456aafd2a0f1ddc9482727f20fe9575565dd6'
500        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
501        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
502
503    def test_mips_malta32el_nanomips_16k_up(self):
504        """
505        :avocado: tags=arch:mipsel
506        :avocado: tags=machine:malta
507        :avocado: tags=endian:little
508        :avocado: tags=cpu:I7200
509        """
510        kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/'
511                      'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
512                      'generic_nano32r6el_page16k_up.xz')
513        kernel_hash = 'e882868f944c71c816e832e2303b7874d044a7bc'
514        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
515        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
516
517    def test_mips_malta32el_nanomips_64k_dbg(self):
518        """
519        :avocado: tags=arch:mipsel
520        :avocado: tags=machine:malta
521        :avocado: tags=endian:little
522        :avocado: tags=cpu:I7200
523        """
524        kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/'
525                      'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
526                      'generic_nano32r6el_page64k_dbg.xz')
527        kernel_hash = '18d1c68f2e23429e266ca39ba5349ccd0aeb7180'
528        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
529        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
530