xref: /openbmc/qemu/tests/avocado/replay_kernel.py (revision ee48fef0)
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-6.6.16/linux-image-current-sunxi_24.2.1_armhf__6.6.16-Seb3e-D6b4a-P2359-Ce96bHfe66-HK01ba-V014b-B067e-R448a.deb')
207        deb_hash = 'f7c3c8c5432f765445dc6e7eab02f3bbe668256b'
208        deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
209        kernel_path = self.extract_from_deb(deb_path,
210                                            '/boot/vmlinuz-6.6.16-current-sunxi')
211        dtb_path = '/usr/lib/linux-image-6.6.16-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_ppc_g3beige(self):
386        """
387        :avocado: tags=arch:ppc
388        :avocado: tags=machine:g3beige
389        """
390        tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc'
391        tar_url = ('https://qemu-advcal.gitlab.io'
392                   '/qac-best-of-multiarch/download/day15.tar.xz')
393        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
394        self.do_test_advcal_2018(file_path, 'invaders.elf',
395                                 args=('-M', 'graphics=off'))
396
397    def test_ppc_mac99(self):
398        """
399        :avocado: tags=arch:ppc
400        :avocado: tags=machine:mac99
401        """
402        tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc'
403        tar_url = ('https://qemu-advcal.gitlab.io'
404                   '/qac-best-of-multiarch/download/day15.tar.xz')
405        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
406        self.do_test_advcal_2018(file_path, 'invaders.elf',
407                                 args=('-M', 'graphics=off'))
408
409    def test_sparc_ss20(self):
410        """
411        :avocado: tags=arch:sparc
412        :avocado: tags=machine:SS-20
413        """
414        tar_hash = 'b18550d5d61c7615d989a06edace051017726a9f'
415        tar_url = ('https://qemu-advcal.gitlab.io'
416                   '/qac-best-of-multiarch/download/day11.tar.xz')
417        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
418        self.do_test_advcal_2018(file_path, 'zImage.elf')
419
420    def test_xtensa_lx60(self):
421        """
422        :avocado: tags=arch:xtensa
423        :avocado: tags=machine:lx60
424        :avocado: tags=cpu:dc233c
425        """
426        tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34'
427        tar_url = ('https://qemu-advcal.gitlab.io'
428                   '/qac-best-of-multiarch/download/day02.tar.xz')
429        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
430        self.do_test_advcal_2018(file_path, 'santas-sleigh-ride.elf')
431
432@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
433class ReplayKernelSlow(ReplayKernelBase):
434    # Override the timeout, because this kernel includes an inner
435    # loop which is executed with TB recompilings during replay,
436    # making it very slow.
437    timeout = 180
438
439    def test_mips_malta_cpio(self):
440        """
441        :avocado: tags=arch:mips
442        :avocado: tags=machine:malta
443        :avocado: tags=endian:big
444        :avocado: tags=slowness:high
445        """
446        deb_url = ('http://snapshot.debian.org/archive/debian/'
447                   '20160601T041800Z/pool/main/l/linux/'
448                   'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb')
449        deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8'
450        deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
451        kernel_path = self.extract_from_deb(deb_path,
452                                            '/boot/vmlinux-4.5.0-2-4kc-malta')
453        initrd_url = ('https://github.com/groeck/linux-build-test/raw/'
454                      '8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/'
455                      'mips/rootfs.cpio.gz')
456        initrd_hash = 'bf806e17009360a866bf537f6de66590de349a99'
457        initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash)
458        initrd_path = self.workdir + "rootfs.cpio"
459        archive.gzip_uncompress(initrd_path_gz, initrd_path)
460
461        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
462                               'console=ttyS0 console=tty '
463                               'rdinit=/sbin/init noreboot')
464        console_pattern = 'Boot successful.'
465        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5,
466                    args=('-initrd', initrd_path))
467
468    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
469    def test_mips64el_malta_5KEc_cpio(self):
470        """
471        :avocado: tags=arch:mips64el
472        :avocado: tags=machine:malta
473        :avocado: tags=endian:little
474        :avocado: tags=slowness:high
475        :avocado: tags=cpu:5KEc
476        """
477        kernel_url = ('https://github.com/philmd/qemu-testing-blob/'
478                      'raw/9ad2df38/mips/malta/mips64el/'
479                      'vmlinux-3.19.3.mtoman.20150408')
480        kernel_hash = '00d1d268fb9f7d8beda1de6bebcc46e884d71754'
481        kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
482        initrd_url = ('https://github.com/groeck/linux-build-test/'
483                      'raw/8584a59e/rootfs/'
484                      'mipsel64/rootfs.mipsel64r1.cpio.gz')
485        initrd_hash = '1dbb8a396e916847325284dbe2151167'
486        initrd_path_gz = self.fetch_asset(initrd_url, algorithm='md5',
487                                          asset_hash=initrd_hash)
488        initrd_path = self.workdir + "rootfs.cpio"
489        archive.gzip_uncompress(initrd_path_gz, initrd_path)
490
491        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
492                               'console=ttyS0 console=tty '
493                               'rdinit=/sbin/init noreboot')
494        console_pattern = 'Boot successful.'
495        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5,
496                    args=('-initrd', initrd_path))
497
498    def do_test_mips_malta32el_nanomips(self, kernel_path_xz):
499        kernel_path = self.workdir + "kernel"
500        with lzma.open(kernel_path_xz, 'rb') as f_in:
501            with open(kernel_path, 'wb') as f_out:
502                shutil.copyfileobj(f_in, f_out)
503
504        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
505                               'mem=256m@@0x0 '
506                               'console=ttyS0')
507        console_pattern = 'Kernel command line: %s' % kernel_command_line
508        self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5)
509
510    def test_mips_malta32el_nanomips_4k(self):
511        """
512        :avocado: tags=arch:mipsel
513        :avocado: tags=machine:malta
514        :avocado: tags=endian:little
515        :avocado: tags=cpu:I7200
516        """
517        kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
518                      'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
519                      'generic_nano32r6el_page4k.xz')
520        kernel_hash = '477456aafd2a0f1ddc9482727f20fe9575565dd6'
521        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
522        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
523
524    def test_mips_malta32el_nanomips_16k_up(self):
525        """
526        :avocado: tags=arch:mipsel
527        :avocado: tags=machine:malta
528        :avocado: tags=endian:little
529        :avocado: tags=cpu:I7200
530        """
531        kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
532                      'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
533                      'generic_nano32r6el_page16k_up.xz')
534        kernel_hash = 'e882868f944c71c816e832e2303b7874d044a7bc'
535        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
536        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
537
538    def test_mips_malta32el_nanomips_64k_dbg(self):
539        """
540        :avocado: tags=arch:mipsel
541        :avocado: tags=machine:malta
542        :avocado: tags=endian:little
543        :avocado: tags=cpu:I7200
544        """
545        kernel_url = ('http://mipsdistros.mips.com/LinuxDistro/nanomips/'
546                      'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/'
547                      'generic_nano32r6el_page64k_dbg.xz')
548        kernel_hash = '18d1c68f2e23429e266ca39ba5349ccd0aeb7180'
549        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
550        self.do_test_mips_malta32el_nanomips(kernel_path_xz)
551