qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

replay_kernel.py (22988B)


      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 
     11 import os
     12 import lzma
     13 import shutil
     14 import logging
     15 import time
     16 
     17 from avocado import skip
     18 from avocado import skipIf
     19 from avocado import skipUnless
     20 from avocado_qemu import wait_for_console_pattern
     21 from avocado.utils import archive
     22 from avocado.utils import process
     23 from boot_linux_console import LinuxKernelTest
     24 
     25 class 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 
     83 class 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')
    411 class 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)