def test_mips_malta_cpio(self): """ :avocado: tags=arch:mips :avocado: tags=machine:malta :avocado: tags=endian:big """ deb_url = ('http://snapshot.debian.org/archive/debian/' '20160601T041800Z/pool/main/l/linux/' 'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb') deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8' deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinux-4.5.0-2-4kc-malta') initrd_url = ('https://github.com/groeck/linux-build-test/raw/' '8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/' 'mips/rootfs.cpio.gz') initrd_hash = 'bf806e17009360a866bf537f6de66590de349a99' initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) initrd_path = self.workdir + "rootfs.cpio" archive.gzip_uncompress(initrd_path_gz, initrd_path) self.vm.set_console() kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0 console=tty ' + 'rdinit=/sbin/init noreboot') self.vm.add_args('-kernel', kernel_path, '-initrd', initrd_path, '-append', kernel_command_line, '-no-reboot') self.vm.launch() self.wait_for_console_pattern('Boot successful.') exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 'BogoMIPS') exec_command_and_wait_for_pattern(self, 'uname -a', 'Debian') exec_command_and_wait_for_pattern(self, 'reboot', 'reboot: Restarting system')
def test_mips_malta_cpio(self): """ :avocado: tags=arch:mips :avocado: tags=machine:malta :avocado: tags=endian:big :avocado: tags=slowness:high """ deb_url = ('http://snapshot.debian.org/archive/debian/' '20160601T041800Z/pool/main/l/linux/' 'linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb') deb_hash = 'a3c84f3e88b54e06107d65a410d1d1e8e0f340f8' deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinux-4.5.0-2-4kc-malta') initrd_url = ('https://github.com/groeck/linux-build-test/raw/' '8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/' 'mips/rootfs.cpio.gz') initrd_hash = 'bf806e17009360a866bf537f6de66590de349a99' initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) initrd_path = self.workdir + "rootfs.cpio" archive.gzip_uncompress(initrd_path_gz, initrd_path) kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0 console=tty ' 'rdinit=/sbin/init noreboot') console_pattern = 'Boot successful.' self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5, args=('-initrd', initrd_path))
def test_mips64el_malta_5KEc_cpio(self): """ :avocado: tags=arch:mips64el :avocado: tags=machine:malta :avocado: tags=endian:little :avocado: tags=slowness:high :avocado: tags=cpu:5KEc """ kernel_url = ('https://github.com/philmd/qemu-testing-blob/' 'raw/9ad2df38/mips/malta/mips64el/' 'vmlinux-3.19.3.mtoman.20150408') kernel_hash = '00d1d268fb9f7d8beda1de6bebcc46e884d71754' kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) initrd_url = ('https://github.com/groeck/linux-build-test/' 'raw/8584a59e/rootfs/' 'mipsel64/rootfs.mipsel64r1.cpio.gz') initrd_hash = '1dbb8a396e916847325284dbe2151167' initrd_path_gz = self.fetch_asset(initrd_url, algorithm='md5', asset_hash=initrd_hash) initrd_path = self.workdir + "rootfs.cpio" archive.gzip_uncompress(initrd_path_gz, initrd_path) kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0 console=tty ' 'rdinit=/sbin/init noreboot') console_pattern = 'Boot successful.' self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5, args=('-initrd', initrd_path))
def test_arm_cubieboard_initrd(self): """ :avocado: tags=arch:arm :avocado: tags=machine:cubieboard """ deb_url = ( 'https://apt.armbian.com/pool/main/l/' 'linux-5.10.16-sunxi/linux-image-current-sunxi_21.02.2_armhf.deb') deb_hash = '9fa84beda245cabf0b4fa84cf6eaa7738ead1da0' deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinuz-5.10.16-sunxi') dtb_path = '/usr/lib/linux-image-current-sunxi/sun4i-a10-cubieboard.dtb' dtb_path = self.extract_from_deb(deb_path, dtb_path) initrd_url = ('https://github.com/groeck/linux-build-test/raw/' '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 'arm/rootfs-armv5.cpio.gz') initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) initrd_path = os.path.join(self.workdir, 'rootfs.cpio') archive.gzip_uncompress(initrd_path_gz, initrd_path) kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0,115200 ' 'usbcore.nousb ' 'panic=-1 noreboot') console_pattern = 'Boot successful.' self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=1, args=('-dtb', dtb_path, '-initrd', initrd_path, '-no-reboot'))
def do_test_i6400_framebuffer_logo(self, cpu_cores_count): """ Boot Linux kernel and check Tux logo is displayed on the framebuffer. """ screendump_path = os.path.join(self.workdir, 'screendump.pbm') kernel_url = ('https://github.com/philmd/qemu-testing-blob/raw/' 'a5966ca4b5/mips/malta/mips64el/' 'vmlinux-4.7.0-rc1.I6400.gz') kernel_hash = '096f50c377ec5072e6a366943324622c312045f6' kernel_path_gz = self.fetch_asset(kernel_url, asset_hash=kernel_hash) kernel_path = self.workdir + "vmlinux" archive.gzip_uncompress(kernel_path_gz, kernel_path) tuxlogo_url = ('https://github.com/torvalds/linux/raw/v2.6.12/' 'drivers/video/logo/logo_linux_vga16.ppm') tuxlogo_hash = '3991c2ddbd1ddaecda7601f8aafbcf5b02dc86af' tuxlogo_path = self.fetch_asset(tuxlogo_url, asset_hash=tuxlogo_hash) self.vm.set_console() kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 'clocksource=GIC console=tty0 console=ttyS0') self.vm.add_args('-kernel', kernel_path, '-cpu', 'I6400', '-smp', '%u' % cpu_cores_count, '-vga', 'std', '-append', kernel_command_line) self.vm.launch() framebuffer_ready = 'Console: switching to colour frame buffer device' wait_for_console_pattern(self, framebuffer_ready, failure_message='Kernel panic - not syncing') self.vm.command('human-monitor-command', command_line='stop') self.vm.command('human-monitor-command', command_line='screendump %s' % screendump_path) logger = logging.getLogger('framebuffer') match_threshold = 0.95 screendump_bgr = cv2.imread(screendump_path, cv2.IMREAD_COLOR) tuxlogo_bgr = cv2.imread(tuxlogo_path, cv2.IMREAD_COLOR) result = cv2.matchTemplate(screendump_bgr, tuxlogo_bgr, cv2.TM_CCOEFF_NORMED) loc = np.where(result >= match_threshold) tuxlogo_count = 0 h, w = tuxlogo_bgr.shape[:2] debug_png = os.getenv('AVOCADO_CV2_SCREENDUMP_PNG_PATH') for tuxlogo_count, pt in enumerate(zip(*loc[::-1]), start=1): logger.debug('found Tux at position (x, y) = %s', pt) cv2.rectangle(screendump_bgr, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2) if debug_png: cv2.imwrite(debug_png, screendump_bgr) self.assertGreaterEqual(tuxlogo_count, cpu_cores_count)
def test_arm_quanta_gsj(self): """ :avocado: tags=arch:arm :avocado: tags=machine:quanta-gsj """ # 25 MiB compressed, 32 MiB uncompressed. image_url = ( 'https://github.com/hskinnemoen/openbmc/releases/download/' '20200711-gsj-qemu-0/obmc-phosphor-image-gsj.static.mtd.gz') image_hash = '14895e634923345cb5c8776037ff7876df96f6b1' image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash) image_name = 'obmc.mtd' image_path = os.path.join(self.workdir, image_name) archive.gzip_uncompress(image_path_gz, image_path) self.vm.set_console() drive_args = 'file=' + image_path + ',if=mtd,bus=0,unit=0' self.vm.add_args('-drive', drive_args) self.vm.launch() # Disable drivers and services that stall for a long time during boot, # to avoid running past the 90-second timeout. These may be removed # as the corresponding device support is added. kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + ( 'console=${console} ' 'mem=${mem} ' 'initcall_blacklist=npcm_i2c_bus_driver_init ' 'systemd.mask=systemd-random-seed.service ' 'systemd.mask=dropbearkey.service ' ) self.wait_for_console_pattern('> BootBlock by Nuvoton') self.wait_for_console_pattern('>Device: Poleg BMC NPCM730') self.wait_for_console_pattern('>Skip DDR init.') self.wait_for_console_pattern('U-Boot ') interrupt_interactive_console_until_pattern( self, 'Hit any key to stop autoboot:', 'U-Boot>') exec_command_and_wait_for_pattern( self, "setenv bootargs ${bootargs} " + kernel_command_line, 'U-Boot>') exec_command_and_wait_for_pattern( self, 'run romboot', 'Booting Kernel from flash') self.wait_for_console_pattern('Booting Linux on physical CPU 0x0') self.wait_for_console_pattern('CPU1: thread -1, cpu 1, socket 0') self.wait_for_console_pattern('OpenBMC Project Reference Distro') self.wait_for_console_pattern('gsj login:')
def test_arm_orangepi_initrd(self): """ :avocado: tags=arch:arm :avocado: tags=machine:orangepi-pc """ deb_url = ('https://apt.armbian.com/pool/main/l/' 'linux-4.20.7-sunxi/linux-image-dev-sunxi_5.75_armhf.deb') deb_hash = '1334c29c44d984ffa05ed10de8c3361f33d78315' deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinuz-4.20.7-sunxi') dtb_path = '/usr/lib/linux-image-dev-sunxi/sun8i-h3-orangepi-pc.dtb' dtb_path = self.extract_from_deb(deb_path, dtb_path) initrd_url = ('https://github.com/groeck/linux-build-test/raw/' '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 'arm/rootfs-armv7a.cpio.gz') initrd_hash = '604b2e45cdf35045846b8bbfbf2129b1891bdc9c' initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) initrd_path = os.path.join(self.workdir, 'rootfs.cpio') archive.gzip_uncompress(initrd_path_gz, initrd_path) self.vm.set_console() kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0,115200 ' 'panic=-1 noreboot') self.vm.add_args('-kernel', kernel_path, '-dtb', dtb_path, '-initrd', initrd_path, '-append', kernel_command_line, '-no-reboot') self.vm.launch() self.wait_for_console_pattern('Boot successful.') exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 'Allwinner sun8i Family') exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 'system-control@1c00000') exec_command_and_wait_for_pattern(self, 'reboot', 'reboot: Restarting system') # Wait for VM to shut down gracefully self.vm.wait()
def test_arm_cubieboard_sata(self): """ :avocado: tags=arch:arm :avocado: tags=machine:cubieboard """ deb_url = ('https://apt.armbian.com/pool/main/l/' 'linux-4.20.7-sunxi/linux-image-dev-sunxi_5.75_armhf.deb') deb_hash = '1334c29c44d984ffa05ed10de8c3361f33d78315' deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinuz-4.20.7-sunxi') dtb_path = '/usr/lib/linux-image-dev-sunxi/sun4i-a10-cubieboard.dtb' dtb_path = self.extract_from_deb(deb_path, dtb_path) rootfs_url = ('https://github.com/groeck/linux-build-test/raw/' '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 'arm/rootfs-armv5.ext2.gz') rootfs_hash = '093e89d2b4d982234bf528bc9fb2f2f17a9d1f93' rootfs_path_gz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash) rootfs_path = os.path.join(self.workdir, 'rootfs.cpio') archive.gzip_uncompress(rootfs_path_gz, rootfs_path) self.vm.set_console() kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0,115200 ' 'usbcore.nousb ' 'root=/dev/sda ro ' 'panic=-1 noreboot') self.vm.add_args('-kernel', kernel_path, '-dtb', dtb_path, '-drive', 'if=none,format=raw,id=disk0,file=' + rootfs_path, '-device', 'ide-hd,bus=ide.0,drive=disk0', '-append', kernel_command_line, '-no-reboot') self.vm.launch() self.wait_for_console_pattern('Boot successful.') exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 'Allwinner sun4i/sun5i') exec_command_and_wait_for_pattern(self, 'cat /proc/partitions', 'sda')
def test_mips64el_malta_5KEc_cpio(self): """ :avocado: tags=arch:mips64el :avocado: tags=machine:malta :avocado: tags=endian:little """ kernel_url = ('https://github.com/philmd/qemu-testing-blob/' 'raw/9ad2df38/mips/malta/mips64el/' 'vmlinux-3.19.3.mtoman.20150408') kernel_hash = '00d1d268fb9f7d8beda1de6bebcc46e884d71754' kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) initrd_url = ('https://github.com/groeck/linux-build-test/' 'raw/8584a59e/rootfs/' 'mipsel64/rootfs.mipsel64r1.cpio.gz') initrd_hash = '1dbb8a396e916847325284dbe2151167' initrd_path_gz = self.fetch_asset(initrd_url, algorithm='md5', asset_hash=initrd_hash) initrd_path = self.workdir + "rootfs.cpio" archive.gzip_uncompress(initrd_path_gz, initrd_path) self.vm.set_console() kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0 console=tty ' + 'rdinit=/sbin/init noreboot') self.vm.add_args('-cpu', '5KEc', '-kernel', kernel_path, '-initrd', initrd_path, '-append', kernel_command_line, '-no-reboot') self.vm.launch() wait_for_console_pattern(self, 'Boot successful.') exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 'MIPS 5KE') exec_command_and_wait_for_pattern(self, 'uname -a', '3.19.3.mtoman.20150408') exec_command_and_wait_for_pattern(self, 'reboot', 'reboot: Restarting system') # Wait for VM to shut down gracefully self.vm.wait()
def test_arm_exynos4210_initrd(self): """ :avocado: tags=arch:arm :avocado: tags=machine:smdkc210 """ deb_url = ('https://snapshot.debian.org/archive/debian/' '20190928T224601Z/pool/main/l/linux/' 'linux-image-4.19.0-6-armmp_4.19.67-2+deb10u1_armhf.deb') deb_hash = 'fa9df4a0d38936cb50084838f2cb933f570d7d82' deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinuz-4.19.0-6-armmp') dtb_path = '/usr/lib/linux-image-4.19.0-6-armmp/exynos4210-smdkv310.dtb' dtb_path = self.extract_from_deb(deb_path, dtb_path) initrd_url = ('https://github.com/groeck/linux-build-test/raw/' '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 'arm/rootfs-armv5.cpio.gz') initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) initrd_path = os.path.join(self.workdir, 'rootfs.cpio') archive.gzip_uncompress(initrd_path_gz, initrd_path) self.vm.set_console() kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 'earlycon=exynos4210,0x13800000 earlyprintk ' + 'console=ttySAC0,115200n8 ' + 'random.trust_cpu=off cryptomgr.notests ' + 'cpuidle.off=1 panic=-1 noreboot') self.vm.add_args('-kernel', kernel_path, '-dtb', dtb_path, '-initrd', initrd_path, '-append', kernel_command_line, '-no-reboot') self.vm.launch() self.wait_for_console_pattern('Boot successful.')
def test_arm_cubieboard_initrd(self): """ :avocado: tags=arch:arm :avocado: tags=machine:cubieboard """ deb_url = ('https://apt.armbian.com/pool/main/l/' 'linux-4.20.7-sunxi/linux-image-dev-sunxi_5.75_armhf.deb') deb_hash = '1334c29c44d984ffa05ed10de8c3361f33d78315' deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) kernel_path = self.extract_from_deb(deb_path, '/boot/vmlinuz-4.20.7-sunxi') dtb_path = '/usr/lib/linux-image-dev-sunxi/sun4i-a10-cubieboard.dtb' dtb_path = self.extract_from_deb(deb_path, dtb_path) initrd_url = ('https://github.com/groeck/linux-build-test/raw/' '2eb0a73b5d5a28df3170c546ddaaa9757e1e0848/rootfs/' 'arm/rootfs-armv5.cpio.gz') initrd_hash = '2b50f1873e113523967806f4da2afe385462ff9b' initrd_path_gz = self.fetch_asset(initrd_url, asset_hash=initrd_hash) initrd_path = os.path.join(self.workdir, 'rootfs.cpio') archive.gzip_uncompress(initrd_path_gz, initrd_path) self.vm.set_console() kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0,115200 ' 'usbcore.nousb ' 'panic=-1 noreboot') self.vm.add_args('-kernel', kernel_path, '-dtb', dtb_path, '-initrd', initrd_path, '-append', kernel_command_line, '-no-reboot') self.vm.launch() self.wait_for_console_pattern('Boot successful.') exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 'Allwinner sun4i/sun5i') exec_command_and_wait_for_pattern(self, 'cat /proc/iomem', 'system-control@1c00000') exec_command_and_wait_for_pattern(self, 'reboot', 'reboot: Restarting system')
def test_gzip_uncompress_to_file(self): gz_path = os.path.join(BASEDIR, 'selftests', '.data', 'avocado.gz') filename = os.path.join(self.decompressdir, 'other') ret = archive.gzip_uncompress(gz_path, filename) self.assertEqual(ret, filename)
def test_gzip_uncompress_to_dir(self): gz_path = os.path.join(BASEDIR, 'selftests', '.data', 'avocado.gz') ret = archive.gzip_uncompress(gz_path, self.decompressdir) self.assertEqual(ret, os.path.join(self.decompressdir, 'avocado'))
def test_gzip_uncompress_to_file(self): gz_path = os.path.join(BASEDIR, "selftests", ".data", "avocado.gz") filename = os.path.join(self.decompressdir, "other") ret = archive.gzip_uncompress(gz_path, filename) self.assertEqual(ret, filename)
def test_gzip_uncompress_to_dir(self): gz_path = os.path.join(BASEDIR, "selftests", ".data", "avocado.gz") ret = archive.gzip_uncompress(gz_path, self.decompressdir) self.assertEqual(ret, os.path.join(self.decompressdir, "avocado"))
def test_arm_orangepi_uboot_netbsd9(self): """ :avocado: tags=arch:arm :avocado: tags=machine:orangepi-pc """ # This test download a 304MB compressed image and expand it to 1.3GB... deb_url = ('http://snapshot.debian.org/archive/debian/' '20200108T145233Z/pool/main/u/u-boot/' 'u-boot-sunxi_2020.01%2Bdfsg-1_armhf.deb') deb_hash = 'f67f404a80753ca3d1258f13e38f2b060e13db99' deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash) # We use the common OrangePi PC 'plus' build of U-Boot for our secondary # program loader (SPL). We will then set the path to the more specific # OrangePi "PC" device tree blob with 'setenv fdtfile' in U-Boot prompt, # before to boot NetBSD. uboot_path = '/usr/lib/u-boot/orangepi_plus/u-boot-sunxi-with-spl.bin' uboot_path = self.extract_from_deb(deb_path, uboot_path) image_url = ('https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.0/' 'evbarm-earmv7hf/binary/gzimg/armv7.img.gz') image_hash = '2babb29d36d8360adcb39c09e31060945259917a' image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash) image_path = os.path.join(self.workdir, 'armv7.img') image_drive_args = 'if=sd,format=raw,snapshot=on,file=' + image_path archive.gzip_uncompress(image_path_gz, image_path) # dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1K seek=8 conv=notrunc with open(uboot_path, 'rb') as f_in: with open(image_path, 'r+b') as f_out: f_out.seek(8 * 1024) shutil.copyfileobj(f_in, f_out) # Extend image, to avoid that NetBSD thinks the partition # inside the image is larger than device size itself f_out.seek(0, 2) f_out.seek(64 * 1024 * 1024, 1) f_out.write(bytearray([0x00])) self.vm.set_console() self.vm.add_args('-nic', 'user', '-drive', image_drive_args, '-global', 'allwinner-rtc.base-year=2000', '-no-reboot') self.vm.launch() wait_for_console_pattern(self, 'U-Boot 2020.01+dfsg-1') interrupt_interactive_console_until_pattern( self, 'Hit any key to stop autoboot:', 'switch to partitions #0, OK') exec_command_and_wait_for_pattern(self, '', '=>') cmd = 'setenv bootargs root=ld0a' exec_command_and_wait_for_pattern(self, cmd, '=>') cmd = 'setenv kernel netbsd-GENERIC.ub' exec_command_and_wait_for_pattern(self, cmd, '=>') cmd = 'setenv fdtfile dtb/sun8i-h3-orangepi-pc.dtb' exec_command_and_wait_for_pattern(self, cmd, '=>') cmd = ("setenv bootcmd 'fatload mmc 0:1 ${kernel_addr_r} ${kernel}; " "fatload mmc 0:1 ${fdt_addr_r} ${fdtfile}; " "fdt addr ${fdt_addr_r}; " "bootm ${kernel_addr_r} - ${fdt_addr_r}'") exec_command_and_wait_for_pattern(self, cmd, '=>') exec_command_and_wait_for_pattern(self, 'boot', 'Booting kernel from Legacy Image') wait_for_console_pattern(self, 'Starting kernel ...') wait_for_console_pattern(self, 'NetBSD 9.0 (GENERIC)') # Wait for user-space wait_for_console_pattern(self, 'Starting root file system check')