1*bbbd9b6eSWillian Rampazzo# Functional test that boots a Linux kernel and checks the console 2*bbbd9b6eSWillian Rampazzo# 3*bbbd9b6eSWillian Rampazzo# Copyright (c) 2018 Red Hat, Inc. 4*bbbd9b6eSWillian Rampazzo# 5*bbbd9b6eSWillian Rampazzo# Author: 6*bbbd9b6eSWillian Rampazzo# Cleber Rosa <crosa@redhat.com> 7*bbbd9b6eSWillian Rampazzo# 8*bbbd9b6eSWillian Rampazzo# This work is licensed under the terms of the GNU GPL, version 2 or 9*bbbd9b6eSWillian Rampazzo# later. See the COPYING file in the top-level directory. 10*bbbd9b6eSWillian Rampazzo 11*bbbd9b6eSWillian Rampazzoimport os 12*bbbd9b6eSWillian Rampazzoimport lzma 13*bbbd9b6eSWillian Rampazzoimport gzip 14*bbbd9b6eSWillian Rampazzoimport shutil 15*bbbd9b6eSWillian Rampazzo 16*bbbd9b6eSWillian Rampazzofrom avocado import skip 17*bbbd9b6eSWillian Rampazzofrom avocado import skipUnless 18*bbbd9b6eSWillian Rampazzofrom avocado_qemu import Test 19*bbbd9b6eSWillian Rampazzofrom avocado_qemu import exec_command 20*bbbd9b6eSWillian Rampazzofrom avocado_qemu import exec_command_and_wait_for_pattern 21*bbbd9b6eSWillian Rampazzofrom avocado_qemu import interrupt_interactive_console_until_pattern 22*bbbd9b6eSWillian Rampazzofrom avocado_qemu import wait_for_console_pattern 23*bbbd9b6eSWillian Rampazzofrom avocado.utils import process 24*bbbd9b6eSWillian Rampazzofrom avocado.utils import archive 25*bbbd9b6eSWillian Rampazzofrom avocado.utils.path import find_command, CmdNotFoundError 26*bbbd9b6eSWillian Rampazzo 27*bbbd9b6eSWillian RampazzoP7ZIP_AVAILABLE = True 28*bbbd9b6eSWillian Rampazzotry: 29*bbbd9b6eSWillian Rampazzo find_command('7z') 30*bbbd9b6eSWillian Rampazzoexcept CmdNotFoundError: 31*bbbd9b6eSWillian Rampazzo P7ZIP_AVAILABLE = False 32*bbbd9b6eSWillian Rampazzo 33*bbbd9b6eSWillian Rampazzo""" 34*bbbd9b6eSWillian RampazzoRound up to next power of 2 35*bbbd9b6eSWillian Rampazzo""" 36*bbbd9b6eSWillian Rampazzodef pow2ceil(x): 37*bbbd9b6eSWillian Rampazzo return 1 if x == 0 else 2**(x - 1).bit_length() 38*bbbd9b6eSWillian Rampazzo 39*bbbd9b6eSWillian Rampazzo""" 40*bbbd9b6eSWillian RampazzoExpand file size to next power of 2 41*bbbd9b6eSWillian Rampazzo""" 42*bbbd9b6eSWillian Rampazzodef image_pow2ceil_expand(path): 43*bbbd9b6eSWillian Rampazzo size = os.path.getsize(path) 44*bbbd9b6eSWillian Rampazzo size_aligned = pow2ceil(size) 45*bbbd9b6eSWillian Rampazzo if size != size_aligned: 46*bbbd9b6eSWillian Rampazzo with open(path, 'ab+') as fd: 47*bbbd9b6eSWillian Rampazzo fd.truncate(size_aligned) 48*bbbd9b6eSWillian Rampazzo 49*bbbd9b6eSWillian Rampazzoclass LinuxKernelTest(Test): 50*bbbd9b6eSWillian Rampazzo KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 ' 51*bbbd9b6eSWillian Rampazzo 52*bbbd9b6eSWillian Rampazzo def wait_for_console_pattern(self, success_message, vm=None): 53*bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, success_message, 54*bbbd9b6eSWillian Rampazzo failure_message='Kernel panic - not syncing', 55*bbbd9b6eSWillian Rampazzo vm=vm) 56*bbbd9b6eSWillian Rampazzo 57*bbbd9b6eSWillian Rampazzo def extract_from_deb(self, deb, path): 58*bbbd9b6eSWillian Rampazzo """ 59*bbbd9b6eSWillian Rampazzo Extracts a file from a deb package into the test workdir 60*bbbd9b6eSWillian Rampazzo 61*bbbd9b6eSWillian Rampazzo :param deb: path to the deb archive 62*bbbd9b6eSWillian Rampazzo :param path: path within the deb archive of the file to be extracted 63*bbbd9b6eSWillian Rampazzo :returns: path of the extracted file 64*bbbd9b6eSWillian Rampazzo """ 65*bbbd9b6eSWillian Rampazzo cwd = os.getcwd() 66*bbbd9b6eSWillian Rampazzo os.chdir(self.workdir) 67*bbbd9b6eSWillian Rampazzo file_path = process.run("ar t %s" % deb).stdout_text.split()[2] 68*bbbd9b6eSWillian Rampazzo process.run("ar x %s %s" % (deb, file_path)) 69*bbbd9b6eSWillian Rampazzo archive.extract(file_path, self.workdir) 70*bbbd9b6eSWillian Rampazzo os.chdir(cwd) 71*bbbd9b6eSWillian Rampazzo # Return complete path to extracted file. Because callers to 72*bbbd9b6eSWillian Rampazzo # extract_from_deb() specify 'path' with a leading slash, it is 73*bbbd9b6eSWillian Rampazzo # necessary to use os.path.relpath() as otherwise os.path.join() 74*bbbd9b6eSWillian Rampazzo # interprets it as an absolute path and drops the self.workdir part. 75*bbbd9b6eSWillian Rampazzo return os.path.normpath(os.path.join(self.workdir, 76*bbbd9b6eSWillian Rampazzo os.path.relpath(path, '/'))) 77*bbbd9b6eSWillian Rampazzo 78*bbbd9b6eSWillian Rampazzo def extract_from_rpm(self, rpm, path): 79*bbbd9b6eSWillian Rampazzo """ 80*bbbd9b6eSWillian Rampazzo Extracts a file from an RPM package into the test workdir. 81*bbbd9b6eSWillian Rampazzo 82*bbbd9b6eSWillian Rampazzo :param rpm: path to the rpm archive 83*bbbd9b6eSWillian Rampazzo :param path: path within the rpm archive of the file to be extracted 84*bbbd9b6eSWillian Rampazzo needs to be a relative path (starting with './') because 85*bbbd9b6eSWillian Rampazzo cpio(1), which is used to extract the file, expects that. 86*bbbd9b6eSWillian Rampazzo :returns: path of the extracted file 87*bbbd9b6eSWillian Rampazzo """ 88*bbbd9b6eSWillian Rampazzo cwd = os.getcwd() 89*bbbd9b6eSWillian Rampazzo os.chdir(self.workdir) 90*bbbd9b6eSWillian Rampazzo process.run("rpm2cpio %s | cpio -id %s" % (rpm, path), shell=True) 91*bbbd9b6eSWillian Rampazzo os.chdir(cwd) 92*bbbd9b6eSWillian Rampazzo return os.path.normpath(os.path.join(self.workdir, path)) 93*bbbd9b6eSWillian Rampazzo 94*bbbd9b6eSWillian Rampazzoclass BootLinuxConsole(LinuxKernelTest): 95*bbbd9b6eSWillian Rampazzo """ 96*bbbd9b6eSWillian Rampazzo Boots a Linux kernel and checks that the console is operational and the 97*bbbd9b6eSWillian Rampazzo kernel command line is properly passed from QEMU to the kernel 98*bbbd9b6eSWillian Rampazzo """ 99*bbbd9b6eSWillian Rampazzo timeout = 90 100*bbbd9b6eSWillian Rampazzo 101*bbbd9b6eSWillian Rampazzo def test_x86_64_pc(self): 102*bbbd9b6eSWillian Rampazzo """ 103*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:x86_64 104*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:pc 105*bbbd9b6eSWillian Rampazzo """ 106*bbbd9b6eSWillian Rampazzo kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' 107*bbbd9b6eSWillian Rampazzo '/linux/releases/29/Everything/x86_64/os/images/pxeboot' 108*bbbd9b6eSWillian Rampazzo '/vmlinuz') 109*bbbd9b6eSWillian Rampazzo kernel_hash = '23bebd2680757891cf7adedb033532163a792495' 110*bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 111*bbbd9b6eSWillian Rampazzo 112*bbbd9b6eSWillian Rampazzo self.vm.set_console() 113*bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 114*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 115*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 116*bbbd9b6eSWillian Rampazzo self.vm.launch() 117*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 118*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 119*bbbd9b6eSWillian Rampazzo 120*bbbd9b6eSWillian Rampazzo def test_mips_malta(self): 121*bbbd9b6eSWillian Rampazzo """ 122*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mips 123*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 124*bbbd9b6eSWillian Rampazzo :avocado: tags=endian:big 125*bbbd9b6eSWillian Rampazzo """ 126*bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 127*bbbd9b6eSWillian Rampazzo '20130217T032700Z/pool/main/l/linux-2.6/' 128*bbbd9b6eSWillian Rampazzo 'linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb') 129*bbbd9b6eSWillian Rampazzo deb_hash = 'a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04' 130*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 131*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 132*bbbd9b6eSWillian Rampazzo '/boot/vmlinux-2.6.32-5-4kc-malta') 133*bbbd9b6eSWillian Rampazzo 134*bbbd9b6eSWillian Rampazzo self.vm.set_console() 135*bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 136*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 137*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 138*bbbd9b6eSWillian Rampazzo self.vm.launch() 139*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 140*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 141*bbbd9b6eSWillian Rampazzo 142*bbbd9b6eSWillian Rampazzo def test_mips64el_malta(self): 143*bbbd9b6eSWillian Rampazzo """ 144*bbbd9b6eSWillian Rampazzo This test requires the ar tool to extract "data.tar.gz" from 145*bbbd9b6eSWillian Rampazzo the Debian package. 146*bbbd9b6eSWillian Rampazzo 147*bbbd9b6eSWillian Rampazzo The kernel can be rebuilt using this Debian kernel source [1] and 148*bbbd9b6eSWillian Rampazzo following the instructions on [2]. 149*bbbd9b6eSWillian Rampazzo 150*bbbd9b6eSWillian Rampazzo [1] http://snapshot.debian.org/package/linux-2.6/2.6.32-48/ 151*bbbd9b6eSWillian Rampazzo #linux-source-2.6.32_2.6.32-48 152*bbbd9b6eSWillian Rampazzo [2] https://kernel-team.pages.debian.net/kernel-handbook/ 153*bbbd9b6eSWillian Rampazzo ch-common-tasks.html#s-common-official 154*bbbd9b6eSWillian Rampazzo 155*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mips64el 156*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 157*bbbd9b6eSWillian Rampazzo """ 158*bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 159*bbbd9b6eSWillian Rampazzo '20130217T032700Z/pool/main/l/linux-2.6/' 160*bbbd9b6eSWillian Rampazzo 'linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb') 161*bbbd9b6eSWillian Rampazzo deb_hash = '1aaec92083bf22fda31e0d27fa8d9a388e5fc3d5' 162*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 163*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 164*bbbd9b6eSWillian Rampazzo '/boot/vmlinux-2.6.32-5-5kc-malta') 165*bbbd9b6eSWillian Rampazzo 166*bbbd9b6eSWillian Rampazzo self.vm.set_console() 167*bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 168*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 169*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 170*bbbd9b6eSWillian Rampazzo self.vm.launch() 171*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 172*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 173*bbbd9b6eSWillian Rampazzo 174*bbbd9b6eSWillian Rampazzo def test_mips64el_fuloong2e(self): 175*bbbd9b6eSWillian Rampazzo """ 176*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mips64el 177*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:fuloong2e 178*bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 179*bbbd9b6eSWillian Rampazzo """ 180*bbbd9b6eSWillian Rampazzo deb_url = ('http://archive.debian.org/debian/pool/main/l/linux/' 181*bbbd9b6eSWillian Rampazzo 'linux-image-3.16.0-6-loongson-2e_3.16.56-1+deb8u1_mipsel.deb') 182*bbbd9b6eSWillian Rampazzo deb_hash = 'd04d446045deecf7b755ef576551de0c4184dd44' 183*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 184*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 185*bbbd9b6eSWillian Rampazzo '/boot/vmlinux-3.16.0-6-loongson-2e') 186*bbbd9b6eSWillian Rampazzo 187*bbbd9b6eSWillian Rampazzo self.vm.set_console() 188*bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 189*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 190*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 191*bbbd9b6eSWillian Rampazzo self.vm.launch() 192*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 193*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 194*bbbd9b6eSWillian Rampazzo 195*bbbd9b6eSWillian Rampazzo def test_mips_malta_cpio(self): 196*bbbd9b6eSWillian Rampazzo """ 197*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mips 198*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 199*bbbd9b6eSWillian Rampazzo :avocado: tags=endian:big 200*bbbd9b6eSWillian Rampazzo """ 201*bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 202*bbbd9b6eSWillian Rampazzo '20160601T041800Z/pool/main/l/linux/' 203*bbbd9b6eSWillian Rampazzo 'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb') 204*bbbd9b6eSWillian Rampazzo deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8' 205*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 206*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 207*bbbd9b6eSWillian Rampazzo '/boot/vmlinux-4.5.0-2-4kc-malta') 208*bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 209*bbbd9b6eSWillian Rampazzo '8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/' 210*bbbd9b6eSWillian Rampazzo 'mips/rootfs.cpio.gz') 211*bbbd9b6eSWillian Rampazzo initrd_hash = 'bf806e17009360a866bf537f6de66590de349a99' 212*bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 213*bbbd9b6eSWillian Rampazzo initrd_path = self.workdir + "rootfs.cpio" 214*bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 215*bbbd9b6eSWillian Rampazzo 216*bbbd9b6eSWillian Rampazzo self.vm.set_console() 217*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE 218*bbbd9b6eSWillian Rampazzo + 'console=ttyS0 console=tty ' 219*bbbd9b6eSWillian Rampazzo + 'rdinit=/sbin/init noreboot') 220*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 221*bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 222*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 223*bbbd9b6eSWillian Rampazzo '-no-reboot') 224*bbbd9b6eSWillian Rampazzo self.vm.launch() 225*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 226*bbbd9b6eSWillian Rampazzo 227*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 228*bbbd9b6eSWillian Rampazzo 'BogoMIPS') 229*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'uname -a', 230*bbbd9b6eSWillian Rampazzo 'Debian') 231*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'reboot', 232*bbbd9b6eSWillian Rampazzo 'reboot: Restarting system') 233*bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 234*bbbd9b6eSWillian Rampazzo self.vm.wait() 235*bbbd9b6eSWillian Rampazzo 236*bbbd9b6eSWillian Rampazzo @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code') 237*bbbd9b6eSWillian Rampazzo def test_mips64el_malta_5KEc_cpio(self): 238*bbbd9b6eSWillian Rampazzo """ 239*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mips64el 240*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 241*bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 242*bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:5KEc 243*bbbd9b6eSWillian Rampazzo """ 244*bbbd9b6eSWillian Rampazzo kernel_url = ('https://github.com/philmd/qemu-testing-blob/' 245*bbbd9b6eSWillian Rampazzo 'raw/9ad2df38/mips/malta/mips64el/' 246*bbbd9b6eSWillian Rampazzo 'vmlinux-3.19.3.mtoman.20150408') 247*bbbd9b6eSWillian Rampazzo kernel_hash = '00d1d268fb9f7d8beda1de6bebcc46e884d71754' 248*bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 249*bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/' 250*bbbd9b6eSWillian Rampazzo 'raw/8584a59e/rootfs/' 251*bbbd9b6eSWillian Rampazzo 'mipsel64/rootfs.mipsel64r1.cpio.gz') 252*bbbd9b6eSWillian Rampazzo initrd_hash = '1dbb8a396e916847325284dbe2151167' 253*bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, algorithm='md5', 254*bbbd9b6eSWillian Rampazzo asset_hash=initrd_hash) 255*bbbd9b6eSWillian Rampazzo initrd_path = self.workdir + "rootfs.cpio" 256*bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 257*bbbd9b6eSWillian Rampazzo 258*bbbd9b6eSWillian Rampazzo self.vm.set_console() 259*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE 260*bbbd9b6eSWillian Rampazzo + 'console=ttyS0 console=tty ' 261*bbbd9b6eSWillian Rampazzo + 'rdinit=/sbin/init noreboot') 262*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 263*bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 264*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 265*bbbd9b6eSWillian Rampazzo '-no-reboot') 266*bbbd9b6eSWillian Rampazzo self.vm.launch() 267*bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'Boot successful.') 268*bbbd9b6eSWillian Rampazzo 269*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 270*bbbd9b6eSWillian Rampazzo 'MIPS 5KE') 271*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'uname -a', 272*bbbd9b6eSWillian Rampazzo '3.19.3.mtoman.20150408') 273*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'reboot', 274*bbbd9b6eSWillian Rampazzo 'reboot: Restarting system') 275*bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 276*bbbd9b6eSWillian Rampazzo self.vm.wait() 277*bbbd9b6eSWillian Rampazzo 278*bbbd9b6eSWillian Rampazzo def do_test_mips_malta32el_nanomips(self, kernel_url, kernel_hash): 279*bbbd9b6eSWillian Rampazzo kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 280*bbbd9b6eSWillian Rampazzo kernel_path = self.workdir + "kernel" 281*bbbd9b6eSWillian Rampazzo with lzma.open(kernel_path_xz, 'rb') as f_in: 282*bbbd9b6eSWillian Rampazzo with open(kernel_path, 'wb') as f_out: 283*bbbd9b6eSWillian Rampazzo shutil.copyfileobj(f_in, f_out) 284*bbbd9b6eSWillian Rampazzo 285*bbbd9b6eSWillian Rampazzo self.vm.set_console() 286*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE 287*bbbd9b6eSWillian Rampazzo + 'mem=256m@@0x0 ' 288*bbbd9b6eSWillian Rampazzo + 'console=ttyS0') 289*bbbd9b6eSWillian Rampazzo self.vm.add_args('-no-reboot', 290*bbbd9b6eSWillian Rampazzo '-kernel', kernel_path, 291*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 292*bbbd9b6eSWillian Rampazzo self.vm.launch() 293*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 294*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 295*bbbd9b6eSWillian Rampazzo 296*bbbd9b6eSWillian Rampazzo def test_mips_malta32el_nanomips_4k(self): 297*bbbd9b6eSWillian Rampazzo """ 298*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mipsel 299*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 300*bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 301*bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:I7200 302*bbbd9b6eSWillian Rampazzo """ 303*bbbd9b6eSWillian Rampazzo kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/' 304*bbbd9b6eSWillian Rampazzo 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 305*bbbd9b6eSWillian Rampazzo 'generic_nano32r6el_page4k.xz') 306*bbbd9b6eSWillian Rampazzo kernel_hash = '477456aafd2a0f1ddc9482727f20fe9575565dd6' 307*bbbd9b6eSWillian Rampazzo self.do_test_mips_malta32el_nanomips(kernel_url, kernel_hash) 308*bbbd9b6eSWillian Rampazzo 309*bbbd9b6eSWillian Rampazzo def test_mips_malta32el_nanomips_16k_up(self): 310*bbbd9b6eSWillian Rampazzo """ 311*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mipsel 312*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 313*bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 314*bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:I7200 315*bbbd9b6eSWillian Rampazzo """ 316*bbbd9b6eSWillian Rampazzo kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/' 317*bbbd9b6eSWillian Rampazzo 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 318*bbbd9b6eSWillian Rampazzo 'generic_nano32r6el_page16k_up.xz') 319*bbbd9b6eSWillian Rampazzo kernel_hash = 'e882868f944c71c816e832e2303b7874d044a7bc' 320*bbbd9b6eSWillian Rampazzo self.do_test_mips_malta32el_nanomips(kernel_url, kernel_hash) 321*bbbd9b6eSWillian Rampazzo 322*bbbd9b6eSWillian Rampazzo def test_mips_malta32el_nanomips_64k_dbg(self): 323*bbbd9b6eSWillian Rampazzo """ 324*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:mipsel 325*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:malta 326*bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 327*bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:I7200 328*bbbd9b6eSWillian Rampazzo """ 329*bbbd9b6eSWillian Rampazzo kernel_url = ('https://mipsdistros.mips.com/LinuxDistro/nanomips/' 330*bbbd9b6eSWillian Rampazzo 'kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/' 331*bbbd9b6eSWillian Rampazzo 'generic_nano32r6el_page64k_dbg.xz') 332*bbbd9b6eSWillian Rampazzo kernel_hash = '18d1c68f2e23429e266ca39ba5349ccd0aeb7180' 333*bbbd9b6eSWillian Rampazzo self.do_test_mips_malta32el_nanomips(kernel_url, kernel_hash) 334*bbbd9b6eSWillian Rampazzo 335*bbbd9b6eSWillian Rampazzo def test_aarch64_virt(self): 336*bbbd9b6eSWillian Rampazzo """ 337*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:aarch64 338*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:virt 339*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 340*bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:cortex-a53 341*bbbd9b6eSWillian Rampazzo """ 342*bbbd9b6eSWillian Rampazzo kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' 343*bbbd9b6eSWillian Rampazzo '/linux/releases/29/Everything/aarch64/os/images/pxeboot' 344*bbbd9b6eSWillian Rampazzo '/vmlinuz') 345*bbbd9b6eSWillian Rampazzo kernel_hash = '8c73e469fc6ea06a58dc83a628fc695b693b8493' 346*bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 347*bbbd9b6eSWillian Rampazzo 348*bbbd9b6eSWillian Rampazzo self.vm.set_console() 349*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 350*bbbd9b6eSWillian Rampazzo 'console=ttyAMA0') 351*bbbd9b6eSWillian Rampazzo self.require_accelerator("tcg") 352*bbbd9b6eSWillian Rampazzo self.vm.add_args('-cpu', 'cortex-a53', 353*bbbd9b6eSWillian Rampazzo '-accel', 'tcg', 354*bbbd9b6eSWillian Rampazzo '-kernel', kernel_path, 355*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 356*bbbd9b6eSWillian Rampazzo self.vm.launch() 357*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 358*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 359*bbbd9b6eSWillian Rampazzo 360*bbbd9b6eSWillian Rampazzo def test_aarch64_xlnx_versal_virt(self): 361*bbbd9b6eSWillian Rampazzo """ 362*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:aarch64 363*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:xlnx-versal-virt 364*bbbd9b6eSWillian Rampazzo :avocado: tags=device:pl011 365*bbbd9b6eSWillian Rampazzo :avocado: tags=device:arm_gicv3 366*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 367*bbbd9b6eSWillian Rampazzo """ 368*bbbd9b6eSWillian Rampazzo images_url = ('http://ports.ubuntu.com/ubuntu-ports/dists/' 369*bbbd9b6eSWillian Rampazzo 'bionic-updates/main/installer-arm64/' 370*bbbd9b6eSWillian Rampazzo '20101020ubuntu543.15/images/') 371*bbbd9b6eSWillian Rampazzo kernel_url = images_url + 'netboot/ubuntu-installer/arm64/linux' 372*bbbd9b6eSWillian Rampazzo kernel_hash = '5bfc54cf7ed8157d93f6e5b0241e727b6dc22c50' 373*bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 374*bbbd9b6eSWillian Rampazzo 375*bbbd9b6eSWillian Rampazzo initrd_url = images_url + 'netboot/ubuntu-installer/arm64/initrd.gz' 376*bbbd9b6eSWillian Rampazzo initrd_hash = 'd385d3e88d53e2004c5d43cbe668b458a094f772' 377*bbbd9b6eSWillian Rampazzo initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 378*bbbd9b6eSWillian Rampazzo 379*bbbd9b6eSWillian Rampazzo self.vm.set_console() 380*bbbd9b6eSWillian Rampazzo self.vm.add_args('-m', '2G', 381*bbbd9b6eSWillian Rampazzo '-accel', 'tcg', 382*bbbd9b6eSWillian Rampazzo '-kernel', kernel_path, 383*bbbd9b6eSWillian Rampazzo '-initrd', initrd_path) 384*bbbd9b6eSWillian Rampazzo self.vm.launch() 385*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Checked W+X mappings: passed') 386*bbbd9b6eSWillian Rampazzo 387*bbbd9b6eSWillian Rampazzo def test_arm_virt(self): 388*bbbd9b6eSWillian Rampazzo """ 389*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 390*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:virt 391*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 392*bbbd9b6eSWillian Rampazzo """ 393*bbbd9b6eSWillian Rampazzo kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' 394*bbbd9b6eSWillian Rampazzo '/linux/releases/29/Everything/armhfp/os/images/pxeboot' 395*bbbd9b6eSWillian Rampazzo '/vmlinuz') 396*bbbd9b6eSWillian Rampazzo kernel_hash = 'e9826d741b4fb04cadba8d4824d1ed3b7fb8b4d4' 397*bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 398*bbbd9b6eSWillian Rampazzo 399*bbbd9b6eSWillian Rampazzo self.vm.set_console() 400*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 401*bbbd9b6eSWillian Rampazzo 'console=ttyAMA0') 402*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 403*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 404*bbbd9b6eSWillian Rampazzo self.vm.launch() 405*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 406*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 407*bbbd9b6eSWillian Rampazzo 408*bbbd9b6eSWillian Rampazzo def test_arm_emcraft_sf2(self): 409*bbbd9b6eSWillian Rampazzo """ 410*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 411*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:emcraft-sf2 412*bbbd9b6eSWillian Rampazzo :avocado: tags=endian:little 413*bbbd9b6eSWillian Rampazzo :avocado: tags=u-boot 414*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 415*bbbd9b6eSWillian Rampazzo """ 416*bbbd9b6eSWillian Rampazzo uboot_url = ('https://raw.githubusercontent.com/' 417*bbbd9b6eSWillian Rampazzo 'Subbaraya-Sundeep/qemu-test-binaries/' 418*bbbd9b6eSWillian Rampazzo 'fe371d32e50ca682391e1e70ab98c2942aeffb01/u-boot') 419*bbbd9b6eSWillian Rampazzo uboot_hash = 'cbb8cbab970f594bf6523b9855be209c08374ae2' 420*bbbd9b6eSWillian Rampazzo uboot_path = self.fetch_asset(uboot_url, asset_hash=uboot_hash) 421*bbbd9b6eSWillian Rampazzo spi_url = ('https://raw.githubusercontent.com/' 422*bbbd9b6eSWillian Rampazzo 'Subbaraya-Sundeep/qemu-test-binaries/' 423*bbbd9b6eSWillian Rampazzo 'fe371d32e50ca682391e1e70ab98c2942aeffb01/spi.bin') 424*bbbd9b6eSWillian Rampazzo spi_hash = '65523a1835949b6f4553be96dec1b6a38fb05501' 425*bbbd9b6eSWillian Rampazzo spi_path = self.fetch_asset(spi_url, asset_hash=spi_hash) 426*bbbd9b6eSWillian Rampazzo 427*bbbd9b6eSWillian Rampazzo self.vm.set_console() 428*bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE 429*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', uboot_path, 430*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 431*bbbd9b6eSWillian Rampazzo '-drive', 'file=' + spi_path + ',if=mtd,format=raw', 432*bbbd9b6eSWillian Rampazzo '-no-reboot') 433*bbbd9b6eSWillian Rampazzo self.vm.launch() 434*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Enter \'help\' for a list') 435*bbbd9b6eSWillian Rampazzo 436*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ifconfig eth0 10.0.2.15', 437*bbbd9b6eSWillian Rampazzo 'eth0: link becomes ready') 438*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2', 439*bbbd9b6eSWillian Rampazzo '3 packets transmitted, 3 packets received, 0% packet loss') 440*bbbd9b6eSWillian Rampazzo 441*bbbd9b6eSWillian Rampazzo def do_test_arm_raspi2(self, uart_id): 442*bbbd9b6eSWillian Rampazzo """ 443*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 444*bbbd9b6eSWillian Rampazzo 445*bbbd9b6eSWillian Rampazzo The kernel can be rebuilt using the kernel source referenced 446*bbbd9b6eSWillian Rampazzo and following the instructions on the on: 447*bbbd9b6eSWillian Rampazzo https://www.raspberrypi.org/documentation/linux/kernel/building.md 448*bbbd9b6eSWillian Rampazzo """ 449*bbbd9b6eSWillian Rampazzo serial_kernel_cmdline = { 450*bbbd9b6eSWillian Rampazzo 0: 'earlycon=pl011,0x3f201000 console=ttyAMA0', 451*bbbd9b6eSWillian Rampazzo } 452*bbbd9b6eSWillian Rampazzo deb_url = ('http://archive.raspberrypi.org/debian/' 453*bbbd9b6eSWillian Rampazzo 'pool/main/r/raspberrypi-firmware/' 454*bbbd9b6eSWillian Rampazzo 'raspberrypi-kernel_1.20190215-1_armhf.deb') 455*bbbd9b6eSWillian Rampazzo deb_hash = 'cd284220b32128c5084037553db3c482426f3972' 456*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 457*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img') 458*bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb') 459*bbbd9b6eSWillian Rampazzo 460*bbbd9b6eSWillian Rampazzo self.vm.set_console() 461*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 462*bbbd9b6eSWillian Rampazzo serial_kernel_cmdline[uart_id] + 463*bbbd9b6eSWillian Rampazzo ' root=/dev/mmcblk0p2 rootwait ' + 464*bbbd9b6eSWillian Rampazzo 'dwc_otg.fiq_fsm_enable=0') 465*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 466*bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 467*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 468*bbbd9b6eSWillian Rampazzo '-device', 'usb-kbd') 469*bbbd9b6eSWillian Rampazzo self.vm.launch() 470*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 471*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 472*bbbd9b6eSWillian Rampazzo console_pattern = 'Product: QEMU USB Keyboard' 473*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 474*bbbd9b6eSWillian Rampazzo 475*bbbd9b6eSWillian Rampazzo def test_arm_raspi2_uart0(self): 476*bbbd9b6eSWillian Rampazzo """ 477*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 478*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:raspi2b 479*bbbd9b6eSWillian Rampazzo :avocado: tags=device:pl011 480*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 481*bbbd9b6eSWillian Rampazzo """ 482*bbbd9b6eSWillian Rampazzo self.do_test_arm_raspi2(0) 483*bbbd9b6eSWillian Rampazzo 484*bbbd9b6eSWillian Rampazzo def test_arm_raspi2_initrd(self): 485*bbbd9b6eSWillian Rampazzo """ 486*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 487*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:raspi2b 488*bbbd9b6eSWillian Rampazzo """ 489*bbbd9b6eSWillian Rampazzo deb_url = ('http://archive.raspberrypi.org/debian/' 490*bbbd9b6eSWillian Rampazzo 'pool/main/r/raspberrypi-firmware/' 491*bbbd9b6eSWillian Rampazzo 'raspberrypi-kernel_1.20190215-1_armhf.deb') 492*bbbd9b6eSWillian Rampazzo deb_hash = 'cd284220b32128c5084037553db3c482426f3972' 493*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 494*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img') 495*bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb') 496*bbbd9b6eSWillian Rampazzo 497*bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 498*bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 499*bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv7a.cpio.gz') 500*bbbd9b6eSWillian Rampazzo initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' 501*bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 502*bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 503*bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 504*bbbd9b6eSWillian Rampazzo 505*bbbd9b6eSWillian Rampazzo self.vm.set_console() 506*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 507*bbbd9b6eSWillian Rampazzo 'earlycon=pl011,0x3f201000 console=ttyAMA0 ' 508*bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot ' + 509*bbbd9b6eSWillian Rampazzo 'dwc_otg.fiq_fsm_enable=0') 510*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 511*bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 512*bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 513*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 514*bbbd9b6eSWillian Rampazzo '-no-reboot') 515*bbbd9b6eSWillian Rampazzo self.vm.launch() 516*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 517*bbbd9b6eSWillian Rampazzo 518*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 519*bbbd9b6eSWillian Rampazzo 'BCM2835') 520*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 521*bbbd9b6eSWillian Rampazzo '/soc/cprman@7e101000') 522*bbbd9b6eSWillian Rampazzo exec_command(self, 'halt') 523*bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 524*bbbd9b6eSWillian Rampazzo self.vm.wait() 525*bbbd9b6eSWillian Rampazzo 526*bbbd9b6eSWillian Rampazzo def test_arm_exynos4210_initrd(self): 527*bbbd9b6eSWillian Rampazzo """ 528*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 529*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:smdkc210 530*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 531*bbbd9b6eSWillian Rampazzo """ 532*bbbd9b6eSWillian Rampazzo deb_url = ('https://snapshot.debian.org/archive/debian/' 533*bbbd9b6eSWillian Rampazzo '20190928T224601Z/pool/main/l/linux/' 534*bbbd9b6eSWillian Rampazzo 'linux-image-4.19.0-6-armmp_4.19.67-2+deb10u1_armhf.deb') 535*bbbd9b6eSWillian Rampazzo deb_hash = 'fa9df4a0d38936cb50084838f2cb933f570d7d82' 536*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 537*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 538*bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-4.19.0-6-armmp') 539*bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-4.19.0-6-armmp/exynos4210-smdkv310.dtb' 540*bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 541*bbbd9b6eSWillian Rampazzo 542*bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 543*bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 544*bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv5.cpio.gz') 545*bbbd9b6eSWillian Rampazzo initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' 546*bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 547*bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 548*bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 549*bbbd9b6eSWillian Rampazzo 550*bbbd9b6eSWillian Rampazzo self.vm.set_console() 551*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 552*bbbd9b6eSWillian Rampazzo 'earlycon=exynos4210,0x13800000 earlyprintk ' + 553*bbbd9b6eSWillian Rampazzo 'console=ttySAC0,115200n8 ' + 554*bbbd9b6eSWillian Rampazzo 'random.trust_cpu=off cryptomgr.notests ' + 555*bbbd9b6eSWillian Rampazzo 'cpuidle.off=1 panic=-1 noreboot') 556*bbbd9b6eSWillian Rampazzo 557*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 558*bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 559*bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 560*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 561*bbbd9b6eSWillian Rampazzo '-no-reboot') 562*bbbd9b6eSWillian Rampazzo self.vm.launch() 563*bbbd9b6eSWillian Rampazzo 564*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 565*bbbd9b6eSWillian Rampazzo # TODO user command, for now the uart is stuck 566*bbbd9b6eSWillian Rampazzo 567*bbbd9b6eSWillian Rampazzo def test_arm_cubieboard_initrd(self): 568*bbbd9b6eSWillian Rampazzo """ 569*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 570*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:cubieboard 571*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 572*bbbd9b6eSWillian Rampazzo """ 573*bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 574*bbbd9b6eSWillian Rampazzo 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') 575*bbbd9b6eSWillian Rampazzo deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 576*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 577*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 578*bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-5.10.16-sunxi') 579*bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb' 580*bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 581*bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 582*bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 583*bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv5.cpio.gz') 584*bbbd9b6eSWillian Rampazzo initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' 585*bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 586*bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 587*bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 588*bbbd9b6eSWillian Rampazzo 589*bbbd9b6eSWillian Rampazzo self.vm.set_console() 590*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 591*bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 592*bbbd9b6eSWillian Rampazzo 'usbcore.nousb ' 593*bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 594*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 595*bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 596*bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 597*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 598*bbbd9b6eSWillian Rampazzo '-no-reboot') 599*bbbd9b6eSWillian Rampazzo self.vm.launch() 600*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 601*bbbd9b6eSWillian Rampazzo 602*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 603*bbbd9b6eSWillian Rampazzo 'Allwinner sun4i/sun5i') 604*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 605*bbbd9b6eSWillian Rampazzo 'system-control@1c00000') 606*bbbd9b6eSWillian Rampazzo # cubieboard's reboot is not functioning; omit reboot test. 607*bbbd9b6eSWillian Rampazzo 608*bbbd9b6eSWillian Rampazzo def test_arm_cubieboard_sata(self): 609*bbbd9b6eSWillian Rampazzo """ 610*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 611*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:cubieboard 612*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 613*bbbd9b6eSWillian Rampazzo """ 614*bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 615*bbbd9b6eSWillian Rampazzo 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') 616*bbbd9b6eSWillian Rampazzo deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 617*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 618*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 619*bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-5.10.16-sunxi') 620*bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb' 621*bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 622*bbbd9b6eSWillian Rampazzo rootfs_url = ('https://github.com/groeck/linux-build-test/raw/' 623*bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 624*bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv5.ext2.gz') 625*bbbd9b6eSWillian Rampazzo rootfs_hash = '093e89d2b4d982234bf528bc9fb2f2f17a9d1f93' 626*bbbd9b6eSWillian Rampazzo rootfs_path_gz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) 627*bbbd9b6eSWillian Rampazzo rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') 628*bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(rootfs_path_gz, rootfs_path) 629*bbbd9b6eSWillian Rampazzo 630*bbbd9b6eSWillian Rampazzo self.vm.set_console() 631*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 632*bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 633*bbbd9b6eSWillian Rampazzo 'usbcore.nousb ' 634*bbbd9b6eSWillian Rampazzo 'root=/dev/sda ro ' 635*bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 636*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 637*bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 638*bbbd9b6eSWillian Rampazzo '-drive', 'if=none,format=raw,id=disk0,file=' 639*bbbd9b6eSWillian Rampazzo + rootfs_path, 640*bbbd9b6eSWillian Rampazzo '-device', 'ide-hd,bus=ide.0,drive=disk0', 641*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 642*bbbd9b6eSWillian Rampazzo '-no-reboot') 643*bbbd9b6eSWillian Rampazzo self.vm.launch() 644*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 645*bbbd9b6eSWillian Rampazzo 646*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 647*bbbd9b6eSWillian Rampazzo 'Allwinner sun4i/sun5i') 648*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', 649*bbbd9b6eSWillian Rampazzo 'sda') 650*bbbd9b6eSWillian Rampazzo # cubieboard's reboot is not functioning; omit reboot test. 651*bbbd9b6eSWillian Rampazzo 652*bbbd9b6eSWillian Rampazzo @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout') 653*bbbd9b6eSWillian Rampazzo def test_arm_quanta_gsj(self): 654*bbbd9b6eSWillian Rampazzo """ 655*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 656*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:quanta-gsj 657*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 658*bbbd9b6eSWillian Rampazzo """ 659*bbbd9b6eSWillian Rampazzo # 25 MiB compressed, 32 MiB uncompressed. 660*bbbd9b6eSWillian Rampazzo image_url = ( 661*bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 662*bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/obmc-phosphor-image-gsj.static.mtd.gz') 663*bbbd9b6eSWillian Rampazzo image_hash = '14895e634923345cb5c8776037ff7876df96f6b1' 664*bbbd9b6eSWillian Rampazzo image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash) 665*bbbd9b6eSWillian Rampazzo image_name = 'obmc.mtd' 666*bbbd9b6eSWillian Rampazzo image_path = os.path.join(self.workdir, image_name) 667*bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(image_path_gz, image_path) 668*bbbd9b6eSWillian Rampazzo 669*bbbd9b6eSWillian Rampazzo self.vm.set_console() 670*bbbd9b6eSWillian Rampazzo drive_args = 'file=' + image_path + ',if=mtd,bus=0,unit=0' 671*bbbd9b6eSWillian Rampazzo self.vm.add_args('-drive', drive_args) 672*bbbd9b6eSWillian Rampazzo self.vm.launch() 673*bbbd9b6eSWillian Rampazzo 674*bbbd9b6eSWillian Rampazzo # Disable drivers and services that stall for a long time during boot, 675*bbbd9b6eSWillian Rampazzo # to avoid running past the 90-second timeout. These may be removed 676*bbbd9b6eSWillian Rampazzo # as the corresponding device support is added. 677*bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + ( 678*bbbd9b6eSWillian Rampazzo 'console=${console} ' 679*bbbd9b6eSWillian Rampazzo 'mem=${mem} ' 680*bbbd9b6eSWillian Rampazzo 'initcall_blacklist=npcm_i2c_bus_driver_init ' 681*bbbd9b6eSWillian Rampazzo 'systemd.mask=systemd-random-seed.service ' 682*bbbd9b6eSWillian Rampazzo 'systemd.mask=dropbearkey.service ' 683*bbbd9b6eSWillian Rampazzo ) 684*bbbd9b6eSWillian Rampazzo 685*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('> BootBlock by Nuvoton') 686*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('>Device: Poleg BMC NPCM730') 687*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('>Skip DDR init.') 688*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('U-Boot ') 689*bbbd9b6eSWillian Rampazzo interrupt_interactive_console_until_pattern( 690*bbbd9b6eSWillian Rampazzo self, 'Hit any key to stop autoboot:', 'U-Boot>') 691*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern( 692*bbbd9b6eSWillian Rampazzo self, "setenv bootargs ${bootargs} " + kernel_command_line, 693*bbbd9b6eSWillian Rampazzo 'U-Boot>') 694*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern( 695*bbbd9b6eSWillian Rampazzo self, 'run romboot', 'Booting Kernel from flash') 696*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Booting Linux on physical CPU 0x0') 697*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0') 698*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('OpenBMC Project Reference Distro') 699*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('gsj login:') 700*bbbd9b6eSWillian Rampazzo 701*bbbd9b6eSWillian Rampazzo def test_arm_quanta_gsj_initrd(self): 702*bbbd9b6eSWillian Rampazzo """ 703*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 704*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:quanta-gsj 705*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 706*bbbd9b6eSWillian Rampazzo """ 707*bbbd9b6eSWillian Rampazzo initrd_url = ( 708*bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 709*bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/obmc-phosphor-initramfs-gsj.cpio.xz') 710*bbbd9b6eSWillian Rampazzo initrd_hash = '98fefe5d7e56727b1eb17d5c00311b1b5c945300' 711*bbbd9b6eSWillian Rampazzo initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 712*bbbd9b6eSWillian Rampazzo kernel_url = ( 713*bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 714*bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/uImage-gsj.bin') 715*bbbd9b6eSWillian Rampazzo kernel_hash = 'fa67b2f141d56d39b3c54305c0e8a899c99eb2c7' 716*bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 717*bbbd9b6eSWillian Rampazzo dtb_url = ( 718*bbbd9b6eSWillian Rampazzo 'https://github.com/hskinnemoen/openbmc/releases/download/' 719*bbbd9b6eSWillian Rampazzo '20200711-gsj-qemu-0/nuvoton-npcm730-gsj.dtb') 720*bbbd9b6eSWillian Rampazzo dtb_hash = '18315f7006d7b688d8312d5c727eecd819aa36a4' 721*bbbd9b6eSWillian Rampazzo dtb_path = self.fetch_asset(dtb_url, asset_hash=dtb_hash) 722*bbbd9b6eSWillian Rampazzo 723*bbbd9b6eSWillian Rampazzo self.vm.set_console() 724*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 725*bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200n8 ' 726*bbbd9b6eSWillian Rampazzo 'earlycon=uart8250,mmio32,0xf0001000') 727*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 728*bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 729*bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 730*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 731*bbbd9b6eSWillian Rampazzo self.vm.launch() 732*bbbd9b6eSWillian Rampazzo 733*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Booting Linux on physical CPU 0x0') 734*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0') 735*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern( 736*bbbd9b6eSWillian Rampazzo 'Give root password for system maintenance') 737*bbbd9b6eSWillian Rampazzo 738*bbbd9b6eSWillian Rampazzo def test_arm_orangepi(self): 739*bbbd9b6eSWillian Rampazzo """ 740*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 741*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 742*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 743*bbbd9b6eSWillian Rampazzo """ 744*bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 745*bbbd9b6eSWillian Rampazzo 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') 746*bbbd9b6eSWillian Rampazzo deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 747*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 748*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 749*bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-5.10.16-sunxi') 750*bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb' 751*bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 752*bbbd9b6eSWillian Rampazzo 753*bbbd9b6eSWillian Rampazzo self.vm.set_console() 754*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 755*bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200n8 ' 756*bbbd9b6eSWillian Rampazzo 'earlycon=uart,mmio32,0x1c28000') 757*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 758*bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 759*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 760*bbbd9b6eSWillian Rampazzo self.vm.launch() 761*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 762*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 763*bbbd9b6eSWillian Rampazzo 764*bbbd9b6eSWillian Rampazzo def test_arm_orangepi_initrd(self): 765*bbbd9b6eSWillian Rampazzo """ 766*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 767*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 768*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 769*bbbd9b6eSWillian Rampazzo """ 770*bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 771*bbbd9b6eSWillian Rampazzo 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') 772*bbbd9b6eSWillian Rampazzo deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 773*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 774*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 775*bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-5.10.16-sunxi') 776*bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb' 777*bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 778*bbbd9b6eSWillian Rampazzo initrd_url = ('https://github.com/groeck/linux-build-test/raw/' 779*bbbd9b6eSWillian Rampazzo '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 780*bbbd9b6eSWillian Rampazzo 'arm/rootfs-armv7a.cpio.gz') 781*bbbd9b6eSWillian Rampazzo initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' 782*bbbd9b6eSWillian Rampazzo initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) 783*bbbd9b6eSWillian Rampazzo initrd_path = os.path.join(self.workdir, 'rootfs.cpio') 784*bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(initrd_path_gz, initrd_path) 785*bbbd9b6eSWillian Rampazzo 786*bbbd9b6eSWillian Rampazzo self.vm.set_console() 787*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 788*bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 789*bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 790*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 791*bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 792*bbbd9b6eSWillian Rampazzo '-initrd', initrd_path, 793*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 794*bbbd9b6eSWillian Rampazzo '-no-reboot') 795*bbbd9b6eSWillian Rampazzo self.vm.launch() 796*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Boot successful.') 797*bbbd9b6eSWillian Rampazzo 798*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 799*bbbd9b6eSWillian Rampazzo 'Allwinner sun8i Family') 800*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 801*bbbd9b6eSWillian Rampazzo 'system-control@1c00000') 802*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'reboot', 803*bbbd9b6eSWillian Rampazzo 'reboot: Restarting system') 804*bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 805*bbbd9b6eSWillian Rampazzo self.vm.wait() 806*bbbd9b6eSWillian Rampazzo 807*bbbd9b6eSWillian Rampazzo def test_arm_orangepi_sd(self): 808*bbbd9b6eSWillian Rampazzo """ 809*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 810*bbbd9b6eSWillian Rampazzo :avocado: tags=accel:tcg 811*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 812*bbbd9b6eSWillian Rampazzo :avocado: tags=device:sd 813*bbbd9b6eSWillian Rampazzo """ 814*bbbd9b6eSWillian Rampazzo deb_url = ('https://apt.armbian.com/pool/main/l/' 815*bbbd9b6eSWillian Rampazzo 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') 816*bbbd9b6eSWillian Rampazzo deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' 817*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 818*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 819*bbbd9b6eSWillian Rampazzo '/boot/vmlinuz-5.10.16-sunxi') 820*bbbd9b6eSWillian Rampazzo dtb_path = '/usr/lib/linux-image-current-sunxi/sun8i-h3-orangepi-pc.dtb' 821*bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, dtb_path) 822*bbbd9b6eSWillian Rampazzo rootfs_url = ('http://storage.kernelci.org/images/rootfs/buildroot/' 823*bbbd9b6eSWillian Rampazzo 'kci-2019.02/armel/base/rootfs.ext2.xz') 824*bbbd9b6eSWillian Rampazzo rootfs_hash = '692510cb625efda31640d1de0a8d60e26040f061' 825*bbbd9b6eSWillian Rampazzo rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) 826*bbbd9b6eSWillian Rampazzo rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') 827*bbbd9b6eSWillian Rampazzo archive.lzma_uncompress(rootfs_path_xz, rootfs_path) 828*bbbd9b6eSWillian Rampazzo image_pow2ceil_expand(rootfs_path) 829*bbbd9b6eSWillian Rampazzo 830*bbbd9b6eSWillian Rampazzo self.vm.set_console() 831*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 832*bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 833*bbbd9b6eSWillian Rampazzo 'root=/dev/mmcblk0 rootwait rw ' 834*bbbd9b6eSWillian Rampazzo 'panic=-1 noreboot') 835*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 836*bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 837*bbbd9b6eSWillian Rampazzo '-drive', 'file=' + rootfs_path + ',if=sd,format=raw', 838*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line, 839*bbbd9b6eSWillian Rampazzo '-no-reboot') 840*bbbd9b6eSWillian Rampazzo self.vm.launch() 841*bbbd9b6eSWillian Rampazzo shell_ready = "/bin/sh: can't access tty; job control turned off" 842*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(shell_ready) 843*bbbd9b6eSWillian Rampazzo 844*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 845*bbbd9b6eSWillian Rampazzo 'Allwinner sun8i Family') 846*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', 847*bbbd9b6eSWillian Rampazzo 'mmcblk0') 848*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ifconfig eth0 up', 849*bbbd9b6eSWillian Rampazzo 'eth0: Link is Up') 850*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'udhcpc eth0', 851*bbbd9b6eSWillian Rampazzo 'udhcpc: lease of 10.0.2.15 obtained') 852*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'ping -c 3 10.0.2.2', 853*bbbd9b6eSWillian Rampazzo '3 packets transmitted, 3 packets received, 0% packet loss') 854*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'reboot', 855*bbbd9b6eSWillian Rampazzo 'reboot: Restarting system') 856*bbbd9b6eSWillian Rampazzo # Wait for VM to shut down gracefully 857*bbbd9b6eSWillian Rampazzo self.vm.wait() 858*bbbd9b6eSWillian Rampazzo 859*bbbd9b6eSWillian Rampazzo @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') 860*bbbd9b6eSWillian Rampazzo def test_arm_orangepi_bionic_20_08(self): 861*bbbd9b6eSWillian Rampazzo """ 862*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 863*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 864*bbbd9b6eSWillian Rampazzo :avocado: tags=device:sd 865*bbbd9b6eSWillian Rampazzo """ 866*bbbd9b6eSWillian Rampazzo 867*bbbd9b6eSWillian Rampazzo # This test download a 275 MiB compressed image and expand it 868*bbbd9b6eSWillian Rampazzo # to 1036 MiB, but the underlying filesystem is 1552 MiB... 869*bbbd9b6eSWillian Rampazzo # As we expand it to 2 GiB we are safe. 870*bbbd9b6eSWillian Rampazzo 871*bbbd9b6eSWillian Rampazzo image_url = ('https://archive.armbian.com/orangepipc/archive/' 872*bbbd9b6eSWillian Rampazzo 'Armbian_20.08.1_Orangepipc_bionic_current_5.8.5.img.xz') 873*bbbd9b6eSWillian Rampazzo image_hash = ('b4d6775f5673486329e45a0586bf06b6' 874*bbbd9b6eSWillian Rampazzo 'dbe792199fd182ac6b9c7bb6c7d3e6dd') 875*bbbd9b6eSWillian Rampazzo image_path_xz = self.fetch_asset(image_url, asset_hash=image_hash, 876*bbbd9b6eSWillian Rampazzo algorithm='sha256') 877*bbbd9b6eSWillian Rampazzo image_path = archive.extract(image_path_xz, self.workdir) 878*bbbd9b6eSWillian Rampazzo image_pow2ceil_expand(image_path) 879*bbbd9b6eSWillian Rampazzo 880*bbbd9b6eSWillian Rampazzo self.vm.set_console() 881*bbbd9b6eSWillian Rampazzo self.vm.add_args('-drive', 'file=' + image_path + ',if=sd,format=raw', 882*bbbd9b6eSWillian Rampazzo '-nic', 'user', 883*bbbd9b6eSWillian Rampazzo '-no-reboot') 884*bbbd9b6eSWillian Rampazzo self.vm.launch() 885*bbbd9b6eSWillian Rampazzo 886*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 887*bbbd9b6eSWillian Rampazzo 'console=ttyS0,115200 ' 888*bbbd9b6eSWillian Rampazzo 'loglevel=7 ' 889*bbbd9b6eSWillian Rampazzo 'nosmp ' 890*bbbd9b6eSWillian Rampazzo 'systemd.default_timeout_start_sec=9000 ' 891*bbbd9b6eSWillian Rampazzo 'systemd.mask=armbian-zram-config.service ' 892*bbbd9b6eSWillian Rampazzo 'systemd.mask=armbian-ramlog.service') 893*bbbd9b6eSWillian Rampazzo 894*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('U-Boot SPL') 895*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Autoboot in ') 896*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, ' ', '=>') 897*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, "setenv extraargs '" + 898*bbbd9b6eSWillian Rampazzo kernel_command_line + "'", '=>') 899*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'boot', 'Starting kernel ...'); 900*bbbd9b6eSWillian Rampazzo 901*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('systemd[1]: Set hostname ' + 902*bbbd9b6eSWillian Rampazzo 'to <orangepipc>') 903*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('Starting Load Kernel Modules...') 904*bbbd9b6eSWillian Rampazzo 905*bbbd9b6eSWillian Rampazzo @skipUnless(os.getenv('AVOCADO_ALLOW_LARGE_STORAGE'), 'storage limited') 906*bbbd9b6eSWillian Rampazzo def test_arm_orangepi_uboot_netbsd9(self): 907*bbbd9b6eSWillian Rampazzo """ 908*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 909*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:orangepi-pc 910*bbbd9b6eSWillian Rampazzo :avocado: tags=device:sd 911*bbbd9b6eSWillian Rampazzo :avocado: tags=os:netbsd 912*bbbd9b6eSWillian Rampazzo """ 913*bbbd9b6eSWillian Rampazzo # This test download a 304MB compressed image and expand it to 2GB 914*bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 915*bbbd9b6eSWillian Rampazzo '20200108T145233Z/pool/main/u/u-boot/' 916*bbbd9b6eSWillian Rampazzo 'u-boot-sunxi_2020.01%2Bdfsg-1_armhf.deb') 917*bbbd9b6eSWillian Rampazzo deb_hash = 'f67f404a80753ca3d1258f13e38f2b060e13db99' 918*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 919*bbbd9b6eSWillian Rampazzo # We use the common OrangePi PC 'plus' build of U-Boot for our secondary 920*bbbd9b6eSWillian Rampazzo # program loader (SPL). We will then set the path to the more specific 921*bbbd9b6eSWillian Rampazzo # OrangePi "PC" device tree blob with 'setenv fdtfile' in U-Boot prompt, 922*bbbd9b6eSWillian Rampazzo # before to boot NetBSD. 923*bbbd9b6eSWillian Rampazzo uboot_path = '/usr/lib/u-boot/orangepi_plus/u-boot-sunxi-with-spl.bin' 924*bbbd9b6eSWillian Rampazzo uboot_path = self.extract_from_deb(deb_path, uboot_path) 925*bbbd9b6eSWillian Rampazzo image_url = ('https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.0/' 926*bbbd9b6eSWillian Rampazzo 'evbarm-earmv7hf/binary/gzimg/armv7.img.gz') 927*bbbd9b6eSWillian Rampazzo image_hash = '2babb29d36d8360adcb39c09e31060945259917a' 928*bbbd9b6eSWillian Rampazzo image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash) 929*bbbd9b6eSWillian Rampazzo image_path = os.path.join(self.workdir, 'armv7.img') 930*bbbd9b6eSWillian Rampazzo archive.gzip_uncompress(image_path_gz, image_path) 931*bbbd9b6eSWillian Rampazzo image_pow2ceil_expand(image_path) 932*bbbd9b6eSWillian Rampazzo image_drive_args = 'if=sd,format=raw,snapshot=on,file=' + image_path 933*bbbd9b6eSWillian Rampazzo 934*bbbd9b6eSWillian Rampazzo # dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1K seek=8 conv=notrunc 935*bbbd9b6eSWillian Rampazzo with open(uboot_path, 'rb') as f_in: 936*bbbd9b6eSWillian Rampazzo with open(image_path, 'r+b') as f_out: 937*bbbd9b6eSWillian Rampazzo f_out.seek(8 * 1024) 938*bbbd9b6eSWillian Rampazzo shutil.copyfileobj(f_in, f_out) 939*bbbd9b6eSWillian Rampazzo 940*bbbd9b6eSWillian Rampazzo self.vm.set_console() 941*bbbd9b6eSWillian Rampazzo self.vm.add_args('-nic', 'user', 942*bbbd9b6eSWillian Rampazzo '-drive', image_drive_args, 943*bbbd9b6eSWillian Rampazzo '-global', 'allwinner-rtc.base-year=2000', 944*bbbd9b6eSWillian Rampazzo '-no-reboot') 945*bbbd9b6eSWillian Rampazzo self.vm.launch() 946*bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'U-Boot 2020.01+dfsg-1') 947*bbbd9b6eSWillian Rampazzo interrupt_interactive_console_until_pattern(self, 948*bbbd9b6eSWillian Rampazzo 'Hit any key to stop autoboot:', 949*bbbd9b6eSWillian Rampazzo 'switch to partitions #0, OK') 950*bbbd9b6eSWillian Rampazzo 951*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, '', '=>') 952*bbbd9b6eSWillian Rampazzo cmd = 'setenv bootargs root=ld0a' 953*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 954*bbbd9b6eSWillian Rampazzo cmd = 'setenv kernel netbsd-GENERIC.ub' 955*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 956*bbbd9b6eSWillian Rampazzo cmd = 'setenv fdtfile dtb/sun8i-h3-orangepi-pc.dtb' 957*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 958*bbbd9b6eSWillian Rampazzo cmd = ("setenv bootcmd 'fatload mmc 0:1 ${kernel_addr_r} ${kernel}; " 959*bbbd9b6eSWillian Rampazzo "fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}; " 960*bbbd9b6eSWillian Rampazzo "fdt addr ${fdt_addr_r}; " 961*bbbd9b6eSWillian Rampazzo "bootm ${kernel_addr_r} - ${fdt_addr_r}'") 962*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, cmd, '=>') 963*bbbd9b6eSWillian Rampazzo 964*bbbd9b6eSWillian Rampazzo exec_command_and_wait_for_pattern(self, 'boot', 965*bbbd9b6eSWillian Rampazzo 'Booting kernel from Legacy Image') 966*bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'Starting kernel ...') 967*bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'NetBSD 9.0 (GENERIC)') 968*bbbd9b6eSWillian Rampazzo # Wait for user-space 969*bbbd9b6eSWillian Rampazzo wait_for_console_pattern(self, 'Starting root file system check') 970*bbbd9b6eSWillian Rampazzo 971*bbbd9b6eSWillian Rampazzo def test_aarch64_raspi3_atf(self): 972*bbbd9b6eSWillian Rampazzo """ 973*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:aarch64 974*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:raspi3b 975*bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:cortex-a53 976*bbbd9b6eSWillian Rampazzo :avocado: tags=device:pl011 977*bbbd9b6eSWillian Rampazzo :avocado: tags=atf 978*bbbd9b6eSWillian Rampazzo """ 979*bbbd9b6eSWillian Rampazzo zip_url = ('https://github.com/pbatard/RPi3/releases/download/' 980*bbbd9b6eSWillian Rampazzo 'v1.15/RPi3_UEFI_Firmware_v1.15.zip') 981*bbbd9b6eSWillian Rampazzo zip_hash = '74b3bd0de92683cadb14e008a7575e1d0c3cafb9' 982*bbbd9b6eSWillian Rampazzo zip_path = self.fetch_asset(zip_url, asset_hash=zip_hash) 983*bbbd9b6eSWillian Rampazzo 984*bbbd9b6eSWillian Rampazzo archive.extract(zip_path, self.workdir) 985*bbbd9b6eSWillian Rampazzo efi_fd = os.path.join(self.workdir, 'RPI_EFI.fd') 986*bbbd9b6eSWillian Rampazzo 987*bbbd9b6eSWillian Rampazzo self.vm.set_console(console_index=1) 988*bbbd9b6eSWillian Rampazzo self.vm.add_args('-nodefaults', 989*bbbd9b6eSWillian Rampazzo '-device', 'loader,file=%s,force-raw=true' % efi_fd) 990*bbbd9b6eSWillian Rampazzo self.vm.launch() 991*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('version UEFI Firmware v1.15') 992*bbbd9b6eSWillian Rampazzo 993*bbbd9b6eSWillian Rampazzo def test_s390x_s390_ccw_virtio(self): 994*bbbd9b6eSWillian Rampazzo """ 995*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:s390x 996*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:s390-ccw-virtio 997*bbbd9b6eSWillian Rampazzo """ 998*bbbd9b6eSWillian Rampazzo kernel_url = ('https://archives.fedoraproject.org/pub/archive' 999*bbbd9b6eSWillian Rampazzo '/fedora-secondary/releases/29/Everything/s390x/os/images' 1000*bbbd9b6eSWillian Rampazzo '/kernel.img') 1001*bbbd9b6eSWillian Rampazzo kernel_hash = 'e8e8439103ef8053418ef062644ffd46a7919313' 1002*bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 1003*bbbd9b6eSWillian Rampazzo 1004*bbbd9b6eSWillian Rampazzo self.vm.set_console() 1005*bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=sclp0' 1006*bbbd9b6eSWillian Rampazzo self.vm.add_args('-nodefaults', 1007*bbbd9b6eSWillian Rampazzo '-kernel', kernel_path, 1008*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 1009*bbbd9b6eSWillian Rampazzo self.vm.launch() 1010*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 1011*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1012*bbbd9b6eSWillian Rampazzo 1013*bbbd9b6eSWillian Rampazzo def test_alpha_clipper(self): 1014*bbbd9b6eSWillian Rampazzo """ 1015*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:alpha 1016*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:clipper 1017*bbbd9b6eSWillian Rampazzo """ 1018*bbbd9b6eSWillian Rampazzo kernel_url = ('http://archive.debian.org/debian/dists/lenny/main/' 1019*bbbd9b6eSWillian Rampazzo 'installer-alpha/20090123lenny10/images/cdrom/vmlinuz') 1020*bbbd9b6eSWillian Rampazzo kernel_hash = '3a943149335529e2ed3e74d0d787b85fb5671ba3' 1021*bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) 1022*bbbd9b6eSWillian Rampazzo 1023*bbbd9b6eSWillian Rampazzo uncompressed_kernel = archive.uncompress(kernel_path, self.workdir) 1024*bbbd9b6eSWillian Rampazzo 1025*bbbd9b6eSWillian Rampazzo self.vm.set_console() 1026*bbbd9b6eSWillian Rampazzo kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' 1027*bbbd9b6eSWillian Rampazzo self.vm.add_args('-nodefaults', 1028*bbbd9b6eSWillian Rampazzo '-kernel', uncompressed_kernel, 1029*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 1030*bbbd9b6eSWillian Rampazzo self.vm.launch() 1031*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 1032*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1033*bbbd9b6eSWillian Rampazzo 1034*bbbd9b6eSWillian Rampazzo def test_m68k_q800(self): 1035*bbbd9b6eSWillian Rampazzo """ 1036*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:m68k 1037*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:q800 1038*bbbd9b6eSWillian Rampazzo """ 1039*bbbd9b6eSWillian Rampazzo deb_url = ('https://snapshot.debian.org/archive/debian-ports' 1040*bbbd9b6eSWillian Rampazzo '/20191021T083923Z/pool-m68k/main' 1041*bbbd9b6eSWillian Rampazzo '/l/linux/kernel-image-5.3.0-1-m68k-di_5.3.7-1_m68k.udeb') 1042*bbbd9b6eSWillian Rampazzo deb_hash = '044954bb9be4160a3ce81f8bc1b5e856b75cccd1' 1043*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) 1044*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, 1045*bbbd9b6eSWillian Rampazzo '/boot/vmlinux-5.3.0-1-m68k') 1046*bbbd9b6eSWillian Rampazzo 1047*bbbd9b6eSWillian Rampazzo self.vm.set_console() 1048*bbbd9b6eSWillian Rampazzo kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 1049*bbbd9b6eSWillian Rampazzo 'console=ttyS0 vga=off') 1050*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1051*bbbd9b6eSWillian Rampazzo '-append', kernel_command_line) 1052*bbbd9b6eSWillian Rampazzo self.vm.launch() 1053*bbbd9b6eSWillian Rampazzo console_pattern = 'Kernel command line: %s' % kernel_command_line 1054*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1055*bbbd9b6eSWillian Rampazzo console_pattern = 'No filesystem could mount root' 1056*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern(console_pattern) 1057*bbbd9b6eSWillian Rampazzo 1058*bbbd9b6eSWillian Rampazzo def do_test_advcal_2018(self, day, tar_hash, kernel_name, console=0): 1059*bbbd9b6eSWillian Rampazzo tar_url = ('https://www.qemu-advent-calendar.org' 1060*bbbd9b6eSWillian Rampazzo '/2018/download/day' + day + '.tar.xz') 1061*bbbd9b6eSWillian Rampazzo file_path = self.fetch_asset(tar_url, asset_hash=tar_hash) 1062*bbbd9b6eSWillian Rampazzo archive.extract(file_path, self.workdir) 1063*bbbd9b6eSWillian Rampazzo self.vm.set_console(console_index=console) 1064*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', 1065*bbbd9b6eSWillian Rampazzo self.workdir + '/day' + day + '/' + kernel_name) 1066*bbbd9b6eSWillian Rampazzo self.vm.launch() 1067*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern('QEMU advent calendar') 1068*bbbd9b6eSWillian Rampazzo 1069*bbbd9b6eSWillian Rampazzo def test_arm_vexpressa9(self): 1070*bbbd9b6eSWillian Rampazzo """ 1071*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1072*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:vexpress-a9 1073*bbbd9b6eSWillian Rampazzo """ 1074*bbbd9b6eSWillian Rampazzo tar_hash = '32b7677ce8b6f1471fb0059865f451169934245b' 1075*bbbd9b6eSWillian Rampazzo self.vm.add_args('-dtb', self.workdir + '/day16/vexpress-v2p-ca9.dtb') 1076*bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('16', tar_hash, 'winter.zImage') 1077*bbbd9b6eSWillian Rampazzo 1078*bbbd9b6eSWillian Rampazzo def test_arm_ast2400_palmetto_openbmc_v2_9_0(self): 1079*bbbd9b6eSWillian Rampazzo """ 1080*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1081*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:palmetto-bmc 1082*bbbd9b6eSWillian Rampazzo """ 1083*bbbd9b6eSWillian Rampazzo 1084*bbbd9b6eSWillian Rampazzo image_url = ('https://github.com/openbmc/openbmc/releases/download/2.9.0/' 1085*bbbd9b6eSWillian Rampazzo 'obmc-phosphor-image-palmetto.static.mtd') 1086*bbbd9b6eSWillian Rampazzo image_hash = ('3e13bbbc28e424865dc42f35ad672b10f2e82cdb11846bb28fa625b48beafd0d') 1087*bbbd9b6eSWillian Rampazzo image_path = self.fetch_asset(image_url, asset_hash=image_hash, 1088*bbbd9b6eSWillian Rampazzo algorithm='sha256') 1089*bbbd9b6eSWillian Rampazzo 1090*bbbd9b6eSWillian Rampazzo self.do_test_arm_aspeed(image_path) 1091*bbbd9b6eSWillian Rampazzo 1092*bbbd9b6eSWillian Rampazzo def test_arm_ast2500_romulus_openbmc_v2_9_0(self): 1093*bbbd9b6eSWillian Rampazzo """ 1094*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1095*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:romulus-bmc 1096*bbbd9b6eSWillian Rampazzo """ 1097*bbbd9b6eSWillian Rampazzo 1098*bbbd9b6eSWillian Rampazzo image_url = ('https://github.com/openbmc/openbmc/releases/download/2.9.0/' 1099*bbbd9b6eSWillian Rampazzo 'obmc-phosphor-image-romulus.static.mtd') 1100*bbbd9b6eSWillian Rampazzo image_hash = ('820341076803f1955bc31e647a512c79f9add4f5233d0697678bab4604c7bb25') 1101*bbbd9b6eSWillian Rampazzo image_path = self.fetch_asset(image_url, asset_hash=image_hash, 1102*bbbd9b6eSWillian Rampazzo algorithm='sha256') 1103*bbbd9b6eSWillian Rampazzo 1104*bbbd9b6eSWillian Rampazzo self.do_test_arm_aspeed(image_path) 1105*bbbd9b6eSWillian Rampazzo 1106*bbbd9b6eSWillian Rampazzo def do_test_arm_aspeed(self, image): 1107*bbbd9b6eSWillian Rampazzo self.vm.set_console() 1108*bbbd9b6eSWillian Rampazzo self.vm.add_args('-drive', 'file=' + image + ',if=mtd,format=raw', 1109*bbbd9b6eSWillian Rampazzo '-net', 'nic') 1110*bbbd9b6eSWillian Rampazzo self.vm.launch() 1111*bbbd9b6eSWillian Rampazzo 1112*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("U-Boot 2016.07") 1113*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("## Loading kernel from FIT Image at 20080000") 1114*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("Starting kernel ...") 1115*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("Booting Linux on physical CPU 0x0") 1116*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern( 1117*bbbd9b6eSWillian Rampazzo "aspeed-smc 1e620000.spi: read control register: 203b0641") 1118*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("ftgmac100 1e660000.ethernet eth0: irq ") 1119*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("systemd[1]: Set hostname to") 1120*bbbd9b6eSWillian Rampazzo 1121*bbbd9b6eSWillian Rampazzo def test_arm_ast2600_debian(self): 1122*bbbd9b6eSWillian Rampazzo """ 1123*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:arm 1124*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:tacoma-bmc 1125*bbbd9b6eSWillian Rampazzo """ 1126*bbbd9b6eSWillian Rampazzo deb_url = ('http://snapshot.debian.org/archive/debian/' 1127*bbbd9b6eSWillian Rampazzo '20210302T203551Z/' 1128*bbbd9b6eSWillian Rampazzo 'pool/main/l/linux/' 1129*bbbd9b6eSWillian Rampazzo 'linux-image-5.10.0-3-armmp_5.10.13-1_armhf.deb') 1130*bbbd9b6eSWillian Rampazzo deb_hash = 'db40d32fe39255d05482bea48d72467b67d6225bb2a2a4d6f618cb8976f1e09e' 1131*bbbd9b6eSWillian Rampazzo deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash, 1132*bbbd9b6eSWillian Rampazzo algorithm='sha256') 1133*bbbd9b6eSWillian Rampazzo kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinuz-5.10.0-3-armmp') 1134*bbbd9b6eSWillian Rampazzo dtb_path = self.extract_from_deb(deb_path, 1135*bbbd9b6eSWillian Rampazzo '/usr/lib/linux-image-5.10.0-3-armmp/aspeed-bmc-opp-tacoma.dtb') 1136*bbbd9b6eSWillian Rampazzo 1137*bbbd9b6eSWillian Rampazzo self.vm.set_console() 1138*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1139*bbbd9b6eSWillian Rampazzo '-dtb', dtb_path, 1140*bbbd9b6eSWillian Rampazzo '-net', 'nic') 1141*bbbd9b6eSWillian Rampazzo self.vm.launch() 1142*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("Booting Linux on physical CPU 0xf00") 1143*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("SMP: Total of 2 processors activated") 1144*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("No filesystem could mount root") 1145*bbbd9b6eSWillian Rampazzo 1146*bbbd9b6eSWillian Rampazzo def test_m68k_mcf5208evb(self): 1147*bbbd9b6eSWillian Rampazzo """ 1148*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:m68k 1149*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:mcf5208evb 1150*bbbd9b6eSWillian Rampazzo """ 1151*bbbd9b6eSWillian Rampazzo tar_hash = 'ac688fd00561a2b6ce1359f9ff6aa2b98c9a570c' 1152*bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('07', tar_hash, 'sanity-clause.elf') 1153*bbbd9b6eSWillian Rampazzo 1154*bbbd9b6eSWillian Rampazzo def test_or1k_sim(self): 1155*bbbd9b6eSWillian Rampazzo """ 1156*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:or1k 1157*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:or1k-sim 1158*bbbd9b6eSWillian Rampazzo """ 1159*bbbd9b6eSWillian Rampazzo tar_hash = '20334cdaf386108c530ff0badaecc955693027dd' 1160*bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('20', tar_hash, 'vmlinux') 1161*bbbd9b6eSWillian Rampazzo 1162*bbbd9b6eSWillian Rampazzo def test_nios2_10m50(self): 1163*bbbd9b6eSWillian Rampazzo """ 1164*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:nios2 1165*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:10m50-ghrd 1166*bbbd9b6eSWillian Rampazzo """ 1167*bbbd9b6eSWillian Rampazzo tar_hash = 'e4251141726c412ac0407c5a6bceefbbff018918' 1168*bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('14', tar_hash, 'vmlinux.elf') 1169*bbbd9b6eSWillian Rampazzo 1170*bbbd9b6eSWillian Rampazzo def test_ppc64_e500(self): 1171*bbbd9b6eSWillian Rampazzo """ 1172*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc64 1173*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:ppce500 1174*bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:e5500 1175*bbbd9b6eSWillian Rampazzo """ 1176*bbbd9b6eSWillian Rampazzo tar_hash = '6951d86d644b302898da2fd701739c9406527fe1' 1177*bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('19', tar_hash, 'uImage') 1178*bbbd9b6eSWillian Rampazzo 1179*bbbd9b6eSWillian Rampazzo def do_test_ppc64_powernv(self, proc): 1180*bbbd9b6eSWillian Rampazzo images_url = ('https://github.com/open-power/op-build/releases/download/v2.7/') 1181*bbbd9b6eSWillian Rampazzo 1182*bbbd9b6eSWillian Rampazzo kernel_url = images_url + 'zImage.epapr' 1183*bbbd9b6eSWillian Rampazzo kernel_hash = '0ab237df661727e5392cee97460e8674057a883c5f74381a128fa772588d45cd' 1184*bbbd9b6eSWillian Rampazzo kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash, 1185*bbbd9b6eSWillian Rampazzo algorithm='sha256') 1186*bbbd9b6eSWillian Rampazzo self.vm.set_console() 1187*bbbd9b6eSWillian Rampazzo self.vm.add_args('-kernel', kernel_path, 1188*bbbd9b6eSWillian Rampazzo '-append', 'console=tty0 console=hvc0', 1189*bbbd9b6eSWillian Rampazzo '-device', 'pcie-pci-bridge,id=bridge1,bus=pcie.1,addr=0x0', 1190*bbbd9b6eSWillian Rampazzo '-device', 'nvme,bus=pcie.2,addr=0x0,serial=1234', 1191*bbbd9b6eSWillian Rampazzo '-device', 'e1000e,bus=bridge1,addr=0x3', 1192*bbbd9b6eSWillian Rampazzo '-device', 'nec-usb-xhci,bus=bridge1,addr=0x2') 1193*bbbd9b6eSWillian Rampazzo self.vm.launch() 1194*bbbd9b6eSWillian Rampazzo 1195*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("CPU: " + proc + " generation processor") 1196*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("zImage starting: loaded") 1197*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("Run /init as init process") 1198*bbbd9b6eSWillian Rampazzo self.wait_for_console_pattern("Creating 1 MTD partitions") 1199*bbbd9b6eSWillian Rampazzo 1200*bbbd9b6eSWillian Rampazzo def test_ppc_powernv8(self): 1201*bbbd9b6eSWillian Rampazzo """ 1202*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc64 1203*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:powernv8 1204*bbbd9b6eSWillian Rampazzo """ 1205*bbbd9b6eSWillian Rampazzo self.do_test_ppc64_powernv('P8') 1206*bbbd9b6eSWillian Rampazzo 1207*bbbd9b6eSWillian Rampazzo def test_ppc_powernv9(self): 1208*bbbd9b6eSWillian Rampazzo """ 1209*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc64 1210*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:powernv9 1211*bbbd9b6eSWillian Rampazzo """ 1212*bbbd9b6eSWillian Rampazzo self.do_test_ppc64_powernv('P9') 1213*bbbd9b6eSWillian Rampazzo 1214*bbbd9b6eSWillian Rampazzo def test_ppc_g3beige(self): 1215*bbbd9b6eSWillian Rampazzo """ 1216*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc 1217*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:g3beige 1218*bbbd9b6eSWillian Rampazzo """ 1219*bbbd9b6eSWillian Rampazzo tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' 1220*bbbd9b6eSWillian Rampazzo self.vm.add_args('-M', 'graphics=off') 1221*bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('15', tar_hash, 'invaders.elf') 1222*bbbd9b6eSWillian Rampazzo 1223*bbbd9b6eSWillian Rampazzo def test_ppc_mac99(self): 1224*bbbd9b6eSWillian Rampazzo """ 1225*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:ppc 1226*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:mac99 1227*bbbd9b6eSWillian Rampazzo """ 1228*bbbd9b6eSWillian Rampazzo tar_hash = 'e0b872a5eb8fdc5bed19bd43ffe863900ebcedfc' 1229*bbbd9b6eSWillian Rampazzo self.vm.add_args('-M', 'graphics=off') 1230*bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('15', tar_hash, 'invaders.elf') 1231*bbbd9b6eSWillian Rampazzo 1232*bbbd9b6eSWillian Rampazzo def test_sh4_r2d(self): 1233*bbbd9b6eSWillian Rampazzo """ 1234*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:sh4 1235*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:r2d 1236*bbbd9b6eSWillian Rampazzo """ 1237*bbbd9b6eSWillian Rampazzo tar_hash = 'fe06a4fd8ccbf2e27928d64472939d47829d4c7e' 1238*bbbd9b6eSWillian Rampazzo self.vm.add_args('-append', 'console=ttySC1') 1239*bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('09', tar_hash, 'zImage', console=1) 1240*bbbd9b6eSWillian Rampazzo 1241*bbbd9b6eSWillian Rampazzo def test_sparc_ss20(self): 1242*bbbd9b6eSWillian Rampazzo """ 1243*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:sparc 1244*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:SS-20 1245*bbbd9b6eSWillian Rampazzo """ 1246*bbbd9b6eSWillian Rampazzo tar_hash = 'b18550d5d61c7615d989a06edace051017726a9f' 1247*bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('11', tar_hash, 'zImage.elf') 1248*bbbd9b6eSWillian Rampazzo 1249*bbbd9b6eSWillian Rampazzo def test_xtensa_lx60(self): 1250*bbbd9b6eSWillian Rampazzo """ 1251*bbbd9b6eSWillian Rampazzo :avocado: tags=arch:xtensa 1252*bbbd9b6eSWillian Rampazzo :avocado: tags=machine:lx60 1253*bbbd9b6eSWillian Rampazzo :avocado: tags=cpu:dc233c 1254*bbbd9b6eSWillian Rampazzo """ 1255*bbbd9b6eSWillian Rampazzo tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34' 1256*bbbd9b6eSWillian Rampazzo self.do_test_advcal_2018('02', tar_hash, 'santas-sleigh-ride.elf') 1257