cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

replay_kernel.py (22768B)


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