xref: /qemu/tests/avocado/replay_kernel.py (revision 29b62a10)
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    def test_nios2_10m50(self):
353        """
354        :avocado: tags=arch:nios2
355        :avocado: tags=machine:10m50-ghrd
356        """
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')
362
363    def test_ppc_g3beige(self):
364        """
365        :avocado: tags=arch:ppc
366        :avocado: tags=machine:g3beige
367        """
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'))
374
375    def test_ppc_mac99(self):
376        """
377        :avocado: tags=arch:ppc
378        :avocado: tags=machine:mac99
379        """
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'))
386
387    def test_sparc_ss20(self):
388        """
389        :avocado: tags=arch:sparc
390        :avocado: tags=machine:SS-20
391        """
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')
397
398    def test_xtensa_lx60(self):
399        """
400        :avocado: tags=arch:xtensa
401        :avocado: tags=machine:lx60
402        :avocado: tags=cpu:dc233c
403        """
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')
409
410@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
411class 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
416
417    def test_mips_malta_cpio(self):
418        """
419        :avocado: tags=arch:mips
420        :avocado: tags=machine:malta
421        :avocado: tags=endian:big
422        :avocado: tags=slowness:high
423        """
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)
438
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))
445
446    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
447    def test_mips64el_malta_5KEc_cpio(self):
448        """
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
454        """
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)
468
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))
475
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)
481
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)
487
488    def test_mips_malta32el_nanomips_4k(self):
489        """
490        :avocado: tags=arch:mipsel
491        :avocado: tags=machine:malta
492        :avocado: tags=endian:little
493        :avocado: tags=cpu:I7200
494        """
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)
501
502    def test_mips_malta32el_nanomips_16k_up(self):
503        """
504        :avocado: tags=arch:mipsel
505        :avocado: tags=machine:malta
506        :avocado: tags=endian:little
507        :avocado: tags=cpu:I7200
508        """
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)
515
516    def test_mips_malta32el_nanomips_64k_dbg(self):
517        """
518        :avocado: tags=arch:mipsel
519        :avocado: tags=machine:malta
520        :avocado: tags=endian:little
521        :avocado: tags=cpu:I7200
522        """
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)
529