mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00

The tests don't need it. On top of that, this extra requirement creates a dependency loop between systemd-systemctl-native and util-linux. (From OE-Core rev: b5770d8c56036bdfef8d596d27433d8f408ee36f) Signed-off-by: Vyacheslav Yurkov <uvv.mail@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
142 lines
6.0 KiB
Python
142 lines
6.0 KiB
Python
# Based on runqemu.py test file
|
|
#
|
|
# Copyright (c) 2017 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
#
|
|
|
|
from oeqa.selftest.case import OESelftestTestCase
|
|
from oeqa.utils.commands import bitbake, runqemu, get_bb_var
|
|
from oeqa.core.decorator.data import skipIfNotArch
|
|
from oeqa.core.decorator import OETestTag
|
|
import oe.types
|
|
|
|
class UkiTest(OESelftestTestCase):
|
|
"""Boot Unified Kernel Image (UKI) generated with uki.bbclass on UEFI firmware (omvf/edk2)"""
|
|
|
|
@skipIfNotArch(['i586', 'i686', 'x86_64'])
|
|
@OETestTag("runqemu")
|
|
def test_uki_boot_systemd(self):
|
|
"""Build and boot into UEFI firmware (omvf/edk2), systemd-boot, initrd without systemd, rootfs with systemd"""
|
|
image = "core-image-minimal"
|
|
runqemu_params = get_bb_var('TEST_RUNQEMUPARAMS', image) or ""
|
|
cmd = "runqemu %s nographic serial wic ovmf" % (runqemu_params)
|
|
if oe.types.qemu_use_kvm(self.td.get('QEMU_USE_KVM', 0), self.td["TARGET_ARCH"]):
|
|
cmd += " kvm"
|
|
|
|
self.write_config("""
|
|
# efi firmware must load systemd-boot, not grub
|
|
EFI_PROVIDER = "systemd-boot"
|
|
|
|
# image format must be wic, needs esp partition for firmware etc
|
|
IMAGE_FSTYPES:pn-%s:append = " wic"
|
|
WKS_FILE = "efi-uki-bootdisk.wks.in"
|
|
|
|
# efi, uki and systemd features must be enabled
|
|
INIT_MANAGER = "systemd"
|
|
MACHINE_FEATURES:append = " efi"
|
|
IMAGE_CLASSES:append:pn-core-image-minimal = " uki"
|
|
|
|
# uki embeds also an initrd
|
|
INITRAMFS_IMAGE = "core-image-minimal-initramfs"
|
|
|
|
# runqemu must not load kernel separately, it's in the uki
|
|
QB_KERNEL_ROOT = ""
|
|
QB_DEFAULT_KERNEL = "none"
|
|
|
|
# boot command line provided via uki, not via bootloader
|
|
UKI_CMDLINE = "rootwait root=LABEL=root console=${KERNEL_CONSOLE}"
|
|
|
|
# disable kvm, breaks boot
|
|
QEMU_USE_KVM = ""
|
|
|
|
IMAGE_CLASSES:remove = 'testimage'
|
|
""" % (image))
|
|
|
|
uki_filename = get_bb_var('UKI_FILENAME', image)
|
|
|
|
bitbake(image + " ovmf")
|
|
with runqemu(image, ssh=False, launch_cmd=cmd) as qemu:
|
|
self.assertTrue(qemu.runner.logged, "Failed: %s" % cmd)
|
|
|
|
# Verify from efivars that firmware was:
|
|
# x86_64, qemux86_64, ovmf = edk2
|
|
cmd = "echo $( cat /sys/firmware/efi/efivars/LoaderFirmwareInfo-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f ) | grep 'EDK II'"
|
|
status, output = qemu.run_serial(cmd)
|
|
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
|
|
|
|
# Check that systemd-boot was the loader
|
|
cmd = "echo $( cat /sys/firmware/efi/efivars/LoaderInfo-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f ) | grep systemd-boot"
|
|
status, output = qemu.run_serial(cmd)
|
|
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
|
|
|
|
# Check that systemd-stub was used
|
|
cmd = "echo $( cat /sys/firmware/efi/efivars/StubInfo-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f ) | grep systemd-stub"
|
|
status, output = qemu.run_serial(cmd)
|
|
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
|
|
|
|
# Check that the compiled uki file was booted into
|
|
cmd = "echo $( cat /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f ) | grep '%s'" % (uki_filename)
|
|
status, output = qemu.run_serial(cmd)
|
|
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
|
|
|
|
@skipIfNotArch(['i586', 'i686', 'x86_64'])
|
|
@OETestTag("runqemu")
|
|
def test_uki_sysvinit(self):
|
|
"""Build and boot into UEFI firmware (omvf/edk2), systemd-boot, initrd with sysvinit, rootfs with sysvinit"""
|
|
config = """
|
|
# efi firmware must load systemd-boot, not grub
|
|
EFI_PROVIDER = "systemd-boot"
|
|
|
|
# image format must be wic, needs esp partition for firmware etc
|
|
IMAGE_FSTYPES:pn-core-image-base:append = " wic"
|
|
WKS_FILE = "efi-uki-bootdisk.wks.in"
|
|
|
|
# efi, uki and systemd features must be enabled
|
|
MACHINE_FEATURES:append = " efi"
|
|
IMAGE_CLASSES:append:pn-core-image-base = " uki"
|
|
|
|
# uki embeds also an initrd, no systemd or udev
|
|
INITRAMFS_IMAGE = "core-image-initramfs-boot"
|
|
|
|
# runqemu must not load kernel separately, it's in the uki
|
|
QB_KERNEL_ROOT = ""
|
|
QB_DEFAULT_KERNEL = "none"
|
|
|
|
# boot command line provided via uki, not via bootloader
|
|
UKI_CMDLINE = "rootwait root=LABEL=root console=${KERNEL_CONSOLE}"
|
|
|
|
# disable kvm, breaks boot
|
|
QEMU_USE_KVM = ""
|
|
|
|
IMAGE_CLASSES:remove = 'testimage'
|
|
"""
|
|
self.append_config(config)
|
|
bitbake('core-image-base ovmf')
|
|
runqemu_params = get_bb_var('TEST_RUNQEMUPARAMS', 'core-image-base') or ""
|
|
uki_filename = get_bb_var('UKI_FILENAME', 'core-image-base')
|
|
self.remove_config(config)
|
|
|
|
with runqemu('core-image-base', ssh=False,
|
|
runqemuparams='%s slirp nographic ovmf' % (runqemu_params), image_fstype='wic') as qemu:
|
|
# Verify from efivars that firmware was:
|
|
# x86_64, qemux86_64, ovmf = edk2
|
|
cmd = "echo $( cat /sys/firmware/efi/efivars/LoaderFirmwareInfo-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f ) | grep 'EDK II'"
|
|
status, output = qemu.run_serial(cmd)
|
|
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
|
|
|
|
# Check that systemd-boot was the loader
|
|
cmd = "echo $( cat /sys/firmware/efi/efivars/LoaderInfo-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f ) | grep systemd-boot"
|
|
status, output = qemu.run_serial(cmd)
|
|
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
|
|
|
|
# Check that systemd-stub was used
|
|
cmd = "echo $( cat /sys/firmware/efi/efivars/StubInfo-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f ) | grep systemd-stub"
|
|
status, output = qemu.run_serial(cmd)
|
|
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
|
|
|
|
# Check that the compiled uki file was booted into
|
|
cmd = "echo $( cat /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f ) | grep '%s'" % (uki_filename)
|
|
status, output = qemu.run_serial(cmd)
|
|
self.assertEqual(1, status, 'Failed to run command "%s": %s' % (cmd, output))
|