Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Mikko Rapeli <mikko.rapeli@linaro.org>
To: openembedded-core@lists.openembedded.org
Subject: Re: [OE-core] [PATCH 3/3] oeqa selftest uboot.py: add qemu KVM test case
Date: Fri, 23 May 2025 12:42:30 +0300	[thread overview]
Message-ID: <aDBDBgkopuFquYBZ@nuoska> (raw)
In-Reply-To: <1841DD2A7A0AA7E1.3062@lists.openembedded.org>

Hi,

On Thu, May 22, 2025 at 04:41:16PM +0300, Mikko Rapeli via lists.openembedded.org wrote:
> Add a test case to boot target system via u-boot
> using qemu with KVM. This was broken recently
> and workaround proposed to u-boot. Test case
> works with genericarm64 and qemuarm64 target machines
> compiled and tested on aarch64 build host with KVM
> support.
> 
> Test execution time with full sstate cache is
> around 170 seconds. qemu boot itself takes just
> a few seconds to full userspace.
> 
> Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org>
> ---
>  meta/lib/oeqa/selftest/cases/uboot.py | 55 ++++++++++++++++++++++++++-
>  1 file changed, 53 insertions(+), 2 deletions(-)
> 
> diff --git a/meta/lib/oeqa/selftest/cases/uboot.py b/meta/lib/oeqa/selftest/cases/uboot.py
> index 39e48f8bdb..982822b389 100644
> --- a/meta/lib/oeqa/selftest/cases/uboot.py
> +++ b/meta/lib/oeqa/selftest/cases/uboot.py
> @@ -6,8 +6,8 @@
>  #
>  
>  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.utils.commands import bitbake, runqemu, get_bb_var, runCmd
> +from oeqa.core.decorator.data import skipIfNotArch, skipIfNotMachine
>  from oeqa.core.decorator import OETestTag
>  
>  uboot_boot_patterns = {
> @@ -42,3 +42,54 @@ QEMU_USE_KVM = "False"
>              status, output = qemu.run_serial(cmd)
>              self.assertEqual(status, 1, msg=output)
>              self.assertTrue("U-Boot" in output, msg=output)
> +
> +    @skipIfNotArch(['aarch64'])
> +    # Also works on genericarm64 but no way to encode that currently
> +    @skipIfNotMachine('qemuarm64', 'KVM depends that host and target architectures match, e.g. aarch64 and qemuarm64')

On second thought, these are not quite right. I think HOST_ARCH limit
to "aarch64" is ok but will still cause this to run on x86_64 build machines
which will not work. I think I need to add a BUILD_ARCH decorator to limit this to
run on 'aarch64' build host when building 'aarch64' targets. Then
KVM can work.

I'll update the changes.

Cheers,

-Mikko

> +    @OETestTag("runqemu")
> +    def test_boot_uboot_kvm_to_full_target(self):
> +        """
> +        Tests building u-boot and booting it with QEMU and KVM.
> +        Requires working KVM on build host. See "kvm-ok" output.
> +        """
> +
> +        runCmd("kvm-ok")
> +
> +        self.write_config("""
> +QEMU_USE_KVM = "1"
> +
> +# Using u-boot in EFI mode, need ESP partition for grub/systemd-boot/kernel etc
> +IMAGE_FSTYPES:pn-core-image-minimal:append = " wic"
> +
> +# easiest to follow genericarm64 setup with wks file, initrd and EFI loader
> +INITRAMFS_IMAGE="core-image-initramfs-boot"
> +EFI_PROVIDER = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", "systemd-boot", "grub-efi", d)}"
> +WKS_FILE = "genericarm64.wks.in"
> +
> +# use wic image with ESP for u-boot, not ext4
> +QB_DEFAULT_FSTYPE = "wic"
> +
> +PREFERRED_PROVIDER_virtual/bootloader = "u-boot"
> +QB_DEFAULT_BIOS = "u-boot.bin"
> +
> +# let u-boot or EFI loader load kernel from ESP
> +QB_DEFAULT_KERNEL = "none"
> +
> +# virt pci, not scsi because support not in u-boot to find ESP
> +QB_DRIVE_TYPE = "vd"
> +# qemu usb causes u-boot reset atm
> +QB_OPT_APPEND = ""
> +""")
> +        bitbake("virtual/bootloader core-image-minimal")
> +
> +        runqemu_params = get_bb_var('TEST_RUNQEMUPARAMS', "core-image-minimal") or ""
> +        with runqemu('core-image-minimal', ssh=False, runqemuparams='nographic kvm %s' % runqemu_params) as qemu:
> +
> +            # boot to target and login worked, should have been fast with kvm
> +            cmd = "dmesg"
> +            status, output = qemu.run_serial(cmd)
> +            self.assertEqual(status, 1, msg=output)
> +            # Machine is qemu
> +            self.assertTrue("Machine model: linux,dummy-virt" in output, msg=output)
> +            # with KVM enabled
> +            self.assertTrue("KVM: hypervisor services detected" in output, msg=output)
> -- 
> 2.43.0
> 

> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#217107): https://lists.openembedded.org/g/openembedded-core/message/217107
> Mute This Topic: https://lists.openembedded.org/mt/113247084/7159507
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [mikko.rapeli@linaro.org]
> -=-=-=-=-=-=-=-=-=-=-=-
> 



      parent reply	other threads:[~2025-05-23  9:42 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-22 13:41 [PATCH v3 1/3] u-boot: disable CONFIG_BLOBLIST on genericarm64 and qemuarm64 Mikko Rapeli
2025-05-22 13:41 ` [PATCH 2/3] qemuarm64.conf: allow overriding QB_OPT_APPEND Mikko Rapeli
2025-05-22 13:41 ` [PATCH 3/3] oeqa selftest uboot.py: add qemu KVM test case Mikko Rapeli
2025-05-23 13:15   ` [OE-core] " Mathieu Dubois-Briand
2025-05-23 14:16     ` Mikko Rapeli
     [not found]     ` <18422DAC420B1606.3062@lists.openembedded.org>
2025-05-26  8:45       ` Mikko Rapeli
2025-05-27  6:34         ` Mathieu Dubois-Briand
2025-05-27  7:17           ` Mikko Rapeli
2025-05-27  7:43             ` Mathieu Dubois-Briand
2025-05-27  8:54               ` Mikko Rapeli
2025-05-27  9:37                 ` Mathieu Dubois-Briand
2025-05-27  9:55                   ` Mikko Rapeli
2025-05-27  9:36               ` Mathieu Dubois-Briand
2025-05-27  9:52                 ` Mikko Rapeli
     [not found] ` <1841DD2A7A0AA7E1.3062@lists.openembedded.org>
2025-05-23  9:42   ` Mikko Rapeli [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aDBDBgkopuFquYBZ@nuoska \
    --to=mikko.rapeli@linaro.org \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox