xref: /qemu/tests/avocado/replay_kernel.py (revision 7653b1ea)
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 skipUnless
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
85    def test_i386_pc(self):
86        """
87        :avocado: tags=arch:i386
88        :avocado: tags=machine:pc
89        """
90        kernel_url = ('https://storage.tuxboot.com/20230331/i386/bzImage')
91        kernel_hash = 'a3e5b32a354729e65910f5a1ffcda7c14a6c12a55e8213fb86e277f1b76ed956'
92        kernel_path = self.fetch_asset(kernel_url,
93                                       asset_hash=kernel_hash,
94                                       algorithm = "sha256")
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    # See https://gitlab.com/qemu-project/qemu/-/issues/2094
102    @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test sometimes gets stuck')
103    def test_x86_64_pc(self):
104        """
105        :avocado: tags=arch:x86_64
106        :avocado: tags=machine:pc
107        :avocado: tags=flaky
108        """
109        kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
110                      '/linux/releases/29/Everything/x86_64/os/images/pxeboot'
111                      '/vmlinuz')
112        kernel_hash = '23bebd2680757891cf7adedb033532163a792495'
113        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
114
115        kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
116        console_pattern = 'VFS: Cannot open root device'
117
118        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5)
119
120    def test_mips_malta(self):
121        """
122        :avocado: tags=arch:mips
123        :avocado: tags=machine:malta
124        :avocado: tags=endian:big
125        """
126        deb_url = ('http://snapshot.debian.org/archive/debian/'
127                   '20130217T032700Z/pool/main/l/linux-2.6/'
128                   'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb')
129        deb_hash = 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04'
130        deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
131        kernel_path = self.extract_from_deb(deb_path,
132                                            '/boot/vmlinux-2.6.32-5-4kc-malta')
133        kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
134        console_pattern = 'Kernel command line: %s' % kernel_command_line
135
136        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5)
137
138    def test_mips64el_malta(self):
139        """
140        This test requires the ar tool to extract "data.tar.gz" from
141        the Debian package.
142
143        The kernel can be rebuilt using this Debian kernel source [1] and
144        following the instructions on [2].
145
146        [1] http://snapshot.debian.org/package/linux-2.6/2.6.32-48/
147            #linux-source-2.6.32_2.6.32-48
148        [2] https://kernel-team.pages.debian.net/kernel-handbook/
149            ch-common-tasks.html#s-common-official
150
151        :avocado: tags=arch:mips64el
152        :avocado: tags=machine:malta
153        """
154        deb_url = ('http://snapshot.debian.org/archive/debian/'
155                   '20130217T032700Z/pool/main/l/linux-2.6/'
156                   'linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb')
157        deb_hash = '1aaec92083bf22fda31e0d27fa8d9a388e5fc3d5'
158        deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
159        kernel_path = self.extract_from_deb(deb_path,
160                                            '/boot/vmlinux-2.6.32-5-5kc-malta')
161        kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
162        console_pattern = 'Kernel command line: %s' % kernel_command_line
163        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5)
164
165    def test_aarch64_virt(self):
166        """
167        :avocado: tags=arch:aarch64
168        :avocado: tags=machine:virt
169        :avocado: tags=cpu:cortex-a53
170        """
171        kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
172                      '/linux/releases/29/Everything/aarch64/os/images/pxeboot'
173                      '/vmlinuz')
174        kernel_hash = '8c73e469fc6ea06a58dc83a628fc695b693b8493'
175        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
176
177        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
178                               'console=ttyAMA0')
179        console_pattern = 'VFS: Cannot open root device'
180
181        self.run_rr(kernel_path, kernel_command_line, console_pattern)
182
183    def test_arm_virt(self):
184        """
185        :avocado: tags=arch:arm
186        :avocado: tags=machine:virt
187        """
188        kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
189                      '/linux/releases/29/Everything/armhfp/os/images/pxeboot'
190                      '/vmlinuz')
191        kernel_hash = 'e9826d741b4fb04cadba8d4824d1ed3b7fb8b4d4'
192        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
193
194        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
195                               'console=ttyAMA0')
196        console_pattern = 'VFS: Cannot open root device'
197
198        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=1)
199
200    def test_arm_cubieboard_initrd(self):
201        """
202        :avocado: tags=arch:arm
203        :avocado: tags=machine:cubieboard
204        """
205        deb_url = ('https://apt.armbian.com/pool/main/l/'
206                   'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb')
207        deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0'
208        deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
209        kernel_path = self.extract_from_deb(deb_path,
210                                            '/boot/vmlinuz-5.10.16-sunxi')
211        dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb'
212        dtb_path = self.extract_from_deb(deb_path, dtb_path)
213        initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
214                      '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/'
215                      'arm/rootfs-armv5.cpio.gz')
216        initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b'
217        initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
218        initrd_path = os.path.join(self.workdir, 'rootfs.cpio')
219        archive.gzip_uncompress(initrd_path_gz, initrd_path)
220
221        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
222                               'console=ttyS0,115200 '
223                               'usbcore.nousb '
224                               'panic=-1 noreboot')
225        console_pattern = 'Boot successful.'
226        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=1,
227                    args=('-dtb', dtb_path,
228                          '-initrd', initrd_path,
229                          '-no-reboot'))
230
231    def test_s390x_s390_ccw_virtio(self):
232        """
233        :avocado: tags=arch:s390x
234        :avocado: tags=machine:s390-ccw-virtio
235        """
236        kernel_url = ('https://archives.fedoraproject.org/pub/archive'
237                      '/fedora-secondary/releases/29/Everything/s390x/os/images'
238                      '/kernel.img')
239        kernel_hash = 'e8e8439103ef8053418ef062644ffd46a7919313'
240        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
241
242        kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=sclp0'
243        console_pattern = 'Kernel command line: %s' % kernel_command_line
244        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=9)
245
246    def test_alpha_clipper(self):
247        """
248        :avocado: tags=arch:alpha
249        :avocado: tags=machine:clipper
250        """
251        kernel_url = ('http://archive.debian.org/debian/dists/lenny/main/'
252                      'installer-alpha/20090123lenny10/images/cdrom/vmlinuz')
253        kernel_hash = '3a943149335529e2ed3e74d0d787b85fb5671ba3'
254        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
255
256        uncompressed_kernel = archive.uncompress(kernel_path, self.workdir)
257
258        kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
259        console_pattern = 'Kernel command line: %s' % kernel_command_line
260        self.run_rr(uncompressed_kernel, kernel_command_line, console_pattern, shift=9,
261            args=('-nodefaults', ))
262
263    def test_ppc64_pseries(self):
264        """
265        :avocado: tags=arch:ppc64
266        :avocado: tags=machine:pseries
267        :avocado: tags=accel:tcg
268        """
269        kernel_url = ('https://archives.fedoraproject.org/pub/archive'
270                      '/fedora-secondary/releases/29/Everything/ppc64le/os'
271                      '/ppc/ppc64/vmlinuz')
272        kernel_hash = '3fe04abfc852b66653b8c3c897a59a689270bc77'
273        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
274
275        kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=hvc0'
276        console_pattern = 'VFS: Cannot open root device'
277        self.run_rr(kernel_path, kernel_command_line, console_pattern)
278
279    def test_ppc64_powernv(self):
280        """
281        :avocado: tags=arch:ppc64
282        :avocado: tags=machine:powernv
283        :avocado: tags=accel:tcg
284        """
285        kernel_url = ('https://archives.fedoraproject.org/pub/archive'
286                      '/fedora-secondary/releases/29/Everything/ppc64le/os'
287                      '/ppc/ppc64/vmlinuz')
288        kernel_hash = '3fe04abfc852b66653b8c3c897a59a689270bc77'
289        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
290
291        kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + \
292                              'console=tty0 console=hvc0'
293        console_pattern = 'VFS: Cannot open root device'
294        self.run_rr(kernel_path, kernel_command_line, console_pattern)
295
296    def test_m68k_q800(self):
297        """
298        :avocado: tags=arch:m68k
299        :avocado: tags=machine:q800
300        """
301        deb_url = ('https://snapshot.debian.org/archive/debian-ports'
302                   '/20191021T083923Z/pool-m68k/main'
303                   '/l/linux/kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb')
304        deb_hash = '044954bb9be4160a3ce81f8bc1b5e856b75cccd1'
305        deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
306        kernel_path = self.extract_from_deb(deb_path,
307                                            '/boot/vmlinux-5.3.0-1-m68k')
308
309        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
310                               'console=ttyS0 vga=off')
311        console_pattern = 'No filesystem could mount root'
312        self.run_rr(kernel_path, kernel_command_line, console_pattern)
313
314    def do_test_advcal_2018(self, file_path, kernel_name, args=None):
315        archive.extract(file_path, self.workdir)
316
317        for entry in os.scandir(self.workdir):
318            if entry.name.startswith('day') and entry.is_dir():
319                kernel_path = os.path.join(entry.path, kernel_name)
320                break
321
322        kernel_command_line = ''
323        console_pattern = 'QEMU advent calendar'
324        self.run_rr(kernel_path, kernel_command_line, console_pattern,
325                    args=args)
326
327    def test_arm_vexpressa9(self):
328        """
329        :avocado: tags=arch:arm
330        :avocado: tags=machine:vexpress-a9
331        """
332        tar_hash = '32b7677ce8b6f1471fb0059865f451169934245b'
333        tar_url = ('https://qemu-advcal.gitlab.io'
334                   '/qac-best-of-multiarch/download/day16.tar.xz')
335        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
336        dtb_path = self.workdir + '/day16/vexpress-v2p-ca9.dtb'
337        self.do_test_advcal_2018(file_path, 'winter.zImage',
338                                 args=('-dtb', dtb_path))
339
340    def test_m68k_mcf5208evb(self):
341        """
342        :avocado: tags=arch:m68k
343        :avocado: tags=machine:mcf5208evb
344        """
345        tar_hash = 'ac688fd00561a2b6ce1359f9ff6aa2b98c9a570c'
346        tar_url = ('https://qemu-advcal.gitlab.io'
347                   '/qac-best-of-multiarch/download/day07.tar.xz')
348        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
349        self.do_test_advcal_2018(file_path, 'sanity-clause.elf')
350
351    def test_microblaze_s3adsp1800(self):
352        """
353        :avocado: tags=arch:microblaze
354        :avocado: tags=machine:petalogix-s3adsp1800
355        """
356        tar_hash = '08bf3e3bfb6b6c7ce1e54ab65d54e189f2caf13f'
357        tar_url = ('https://qemu-advcal.gitlab.io'
358                   '/qac-best-of-multiarch/download/day17.tar.xz')
359        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
360        self.do_test_advcal_2018(file_path, 'ballerina.bin')
361
362    def test_ppc64_e500(self):
363        """
364        :avocado: tags=arch:ppc64
365        :avocado: tags=machine:ppce500
366        :avocado: tags=cpu:e5500
367        """
368        tar_hash = '6951d86d644b302898da2fd701739c9406527fe1'
369        tar_url = ('https://qemu-advcal.gitlab.io'
370                   '/qac-best-of-multiarch/download/day19.tar.xz')
371        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
372        self.do_test_advcal_2018(file_path, 'uImage')
373
374    def test_or1k_sim(self):
375        """
376        :avocado: tags=arch:or1k
377        :avocado: tags=machine:or1k-sim
378        """
379        tar_hash = '20334cdaf386108c530ff0badaecc955693027dd'
380        tar_url = ('https://qemu-advcal.gitlab.io'
381                   '/qac-best-of-multiarch/download/day20.tar.xz')
382        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
383        self.do_test_advcal_2018(file_path, 'vmlinux')
384
385    def test_nios2_10m50(self):
386        """
387        :avocado: tags=arch:nios2
388        :avocado: tags=machine:10m50-ghrd
389        """
390        tar_hash = 'e4251141726c412ac0407c5a6bceefbbff018918'
391        tar_url = ('https://qemu-advcal.gitlab.io'
392                   '/qac-best-of-multiarch/download/day14.tar.xz')
393        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
394        self.do_test_advcal_2018(file_path, 'vmlinux.elf')
395
396    def test_ppc_g3beige(self):
397        """
398        :avocado: tags=arch:ppc
399        :avocado: tags=machine:g3beige
400        """
401        tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc'
402        tar_url = ('https://qemu-advcal.gitlab.io'
403                   '/qac-best-of-multiarch/download/day15.tar.xz')
404        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
405        self.do_test_advcal_2018(file_path, 'invaders.elf',
406                                 args=('-M', 'graphics=off'))
407
408    def test_ppc_mac99(self):
409        """
410        :avocado: tags=arch:ppc
411        :avocado: tags=machine:mac99
412        """
413        tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc'
414        tar_url = ('https://qemu-advcal.gitlab.io'
415                   '/qac-best-of-multiarch/download/day15.tar.xz')
416        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
417        self.do_test_advcal_2018(file_path, 'invaders.elf',
418                                 args=('-M', 'graphics=off'))
419
420    def test_sparc_ss20(self):
421        """
422        :avocado: tags=arch:sparc
423        :avocado: tags=machine:SS-20
424        """
425        tar_hash = 'b18550d5d61c7615d989a06edace051017726a9f'
426        tar_url = ('https://qemu-advcal.gitlab.io'
427                   '/qac-best-of-multiarch/download/day11.tar.xz')
428        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
429        self.do_test_advcal_2018(file_path, 'zImage.elf')
430
431    def test_xtensa_lx60(self):
432        """
433        :avocado: tags=arch:xtensa
434        :avocado: tags=machine:lx60
435        :avocado: tags=cpu:dc233c
436        """
437        tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34'
438        tar_url = ('https://qemu-advcal.gitlab.io'
439                   '/qac-best-of-multiarch/download/day02.tar.xz')
440        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
441        self.do_test_advcal_2018(file_path, 'santas-sleigh-ride.elf')
442
443@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
444class ReplayKernelSlow(ReplayKernelBase):
445    # Override the timeout, because this kernel includes an inner
446    # loop which is executed with TB recompilings during replay,
447    # making it very slow.
448    timeout = 180
449
450    def test_mips_malta_cpio(self):
451        """
452        :avocado: tags=arch:mips
453        :avocado: tags=machine:malta
454        :avocado: tags=endian:big
455        :avocado: tags=slowness:high
456        """
457        deb_url = ('http://snapshot.debian.org/archive/debian/'
458                   '20160601T041800Z/pool/main/l/linux/'
459                   'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb')
460        deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8'
461        deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
462        kernel_path = self.extract_from_deb(deb_path,
463                                            '/boot/vmlinux-4.5.0-2-4kc-malta')
464        initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
465                      '8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/'
466                      'mips/rootfs.cpio.gz')
467        initrd_hash = 'bf806e17009360a866bf537f6de66590de349a99'
468        initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
469        initrd_path = self.workdir + "rootfs.cpio"
470        archive.gzip_uncompress(initrd_path_gz, initrd_path)
471
472        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
473                               'console=ttyS0 console=tty '
474                               'rdinit=/sbin/init noreboot')
475        console_pattern = 'Boot successful.'
476        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5,
477                    args=('-initrd', initrd_path))
478
479    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
480    def test_mips64el_malta_5KEc_cpio(self):
481        """
482        :avocado: tags=arch:mips64el
483        :avocado: tags=machine:malta
484        :avocado: tags=endian:little
485        :avocado: tags=slowness:high
486        :avocado: tags=cpu:5KEc
487        """
488        kernel_url = ('https://github.com/philmd/qemu-testing-blob/'
489                      'raw/9ad2df38/mips/malta/mips64el/'
490                      'vmlinux-3.19.3.mtoman.20150408')
491        kernel_hash = '00d1d268fb9f7d8beda1de6bebcc46e884d71754'
492        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
493        initrd_url = ('https://github.com/groeck/linux-build-test/'
494                      'raw/8584a59e/rootfs/'
495                      'mipsel64/rootfs.mipsel64r1.cpio.gz')
496        initrd_hash = '1dbb8a396e916847325284dbe2151167'
497        initrd_path_gz = self.fetch_asset(initrd_url, algorithm='md5',
498                                          asset_hash=initrd_hash)
499        initrd_path = self.workdir + "rootfs.cpio"
500        archive.gzip_uncompress(initrd_path_gz, initrd_path)
501
502        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
503                               'console=ttyS0 console=tty '
504                               'rdinit=/sbin/init noreboot')
505        console_pattern = 'Boot successful.'
506        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5,
507                    args=('-initrd', initrd_path))
508
509    def do_test_mips_malta32el_nanomips(self, kernel_path_xz):
510        kernel_path = self.workdir + "kernel"
511        with lzma.open(kernel_path_xz, 'rb') as f_in:
512            with open(kernel_path, 'wb') as f_out:
513                shutil.copyfileobj(f_in, f_out)
514
515        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
516                               'mem=256m@@0x0 '
517                               'console=ttyS0')
518        console_pattern = 'Kernel command line: %s' % kernel_command_line
519        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5)
520
521    def test_mips_malta32el_nanomips_4k(self):
522        """
523        :avocado: tags=arch:mipsel
524        :avocado: tags=machine:malta
525        :avocado: tags=endian:little
526        :avocado: tags=cpu:I7200
527        """
528        kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
529                      'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
530                      'generic_nano32r6el_page4k.xz')
531        kernel_hash = '477456aafd2a0f1ddc9482727f20fe9575565dd6'
532        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
533        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
534
535    def test_mips_malta32el_nanomips_16k_up(self):
536        """
537        :avocado: tags=arch:mipsel
538        :avocado: tags=machine:malta
539        :avocado: tags=endian:little
540        :avocado: tags=cpu:I7200
541        """
542        kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
543                      'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
544                      'generic_nano32r6el_page16k_up.xz')
545        kernel_hash = 'e882868f944c71c816e832e2303b7874d044a7bc'
546        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
547        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
548
549    def test_mips_malta32el_nanomips_64k_dbg(self):
550        """
551        :avocado: tags=arch:mipsel
552        :avocado: tags=machine:malta
553        :avocado: tags=endian:little
554        :avocado: tags=cpu:I7200
555        """
556        kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
557                      'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
558                      'generic_nano32r6el_page64k_dbg.xz')
559        kernel_hash = '18d1c68f2e23429e266ca39ba5349ccd0aeb7180'
560        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
561        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
562