From: Arnout Vandecappelle via buildroot <buildroot@buildroot.org>
To: Julien Olivain <ju.o@free.fr>
Cc: Arnout Vandecappelle <arnout@rnout.be>, buildroot@buildroot.org
Subject: Re: [Buildroot] [PATCH 3/3] support/testing: new kvmtool runtime test
Date: Wed, 7 Jan 2026 18:49:34 +0100 [thread overview]
Message-ID: <20260107174934.225366-1-arnout@rnout.be> (raw)
In-Reply-To: <20251216231456.347739-3-ju.o@free.fr>
In reply of:
> Signed-off-by: Julien Olivain <ju.o@free.fr>
Applied to 2025.02.x and 2025.11.x. Thanks
> ---
> Patch series tested in:
> https://gitlab.com/jolivain/buildroot/-/jobs/12462463585
> ---
> DEVELOPERS | 2 +
> support/testing/tests/package/test_kvmtool.py | 97 +++++++++++++++++++
> .../package/test_kvmtool/linux-kvm.fragment | 6 ++
> .../rootfs-overlay/etc/profile.d/stty-raw.sh | 3 +
> 4 files changed, 108 insertions(+)
> create mode 100644 support/testing/tests/package/test_kvmtool.py
> create mode 100644 support/testing/tests/package/test_kvmtool/linux-kvm.fragment
> create mode 100644 support/testing/tests/package/test_kvmtool/rootfs-overlay/etc/profile.d/stty-raw.sh
>
> diff --git a/DEVELOPERS b/DEVELOPERS
> index 1b27df9beb..ca2cb44b87 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -1926,6 +1926,8 @@ F: support/testing/tests/package/test_kmod.py
> F: support/testing/tests/package/test_kmod/
> F: support/testing/tests/package/test_kmscube.py
> F: support/testing/tests/package/test_kmscube/
> +F: support/testing/tests/package/test_kvmtool.py
> +F: support/testing/tests/package/test_kvmtool/
> F: support/testing/tests/package/test_lame.py
> F: support/testing/tests/package/test_less.py
> F: support/testing/tests/package/test_libcamera.py
> diff --git a/support/testing/tests/package/test_kvmtool.py b/support/testing/tests/package/test_kvmtool.py
> new file mode 100644
> index 0000000000..d6859172bd
> --- /dev/null
> +++ b/support/testing/tests/package/test_kvmtool.py
> @@ -0,0 +1,97 @@
> +import os
> +
> +import infra.basetest
> +
> +
> +class TestKvmTool(infra.basetest.BRTest):
> + # This test passes the Buildroot image directory to the emulated
> + # guest using the 9p virtiofs. This guest enables the
> + # virtualization support. It will start a nested KVM virtual
> + # machine, using the same Kernel/initramfs images. For these
> + # reasons, we need a specific kernel configuration that enables
> + # KVM and 9P.
> + kern_frag = \
> + infra.filepath("tests/package/test_kvmtool/linux-kvm.fragment")
> + rootfs_overlay = \
> + infra.filepath("tests/package/test_kvmtool/rootfs-overlay")
> + config = \
> + f"""
> + BR2_aarch64=y
> + BR2_TOOLCHAIN_EXTERNAL=y
> + BR2_LINUX_KERNEL=y
> + BR2_LINUX_KERNEL_CUSTOM_VERSION=y
> + BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.1"
> + BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
> + BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
> + BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{kern_frag}"
> + BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
> + BR2_PACKAGE_KVMTOOL=y
> + BR2_ROOTFS_OVERLAY="{rootfs_overlay}"
> + BR2_TARGET_ROOTFS_CPIO=y
> + # BR2_TARGET_ROOTFS_TAR is not set
> + """
> +
> + def test_run(self):
> + img = os.path.join(self.builddir, "images", "rootfs.cpio")
> + kern = os.path.join(self.builddir, "images", "Image")
> + img_dir = os.path.join(self.builddir, "images")
> + virtfs_tag = "br-imgs"
> + virtfs_opts = [
> + f"local,path={img_dir}",
> + f"mount_tag={virtfs_tag}",
> + "security_model=mapped-xattr",
> + "readonly"
> + ]
> + qemu_opts = ["-M", "virt,gic-version=3,virtualization=on",
> + "-cpu", "cortex-a57",
> + "-smp", "4",
> + "-m", "1G",
> + "-virtfs", ','.join(virtfs_opts),
> + "-initrd", img]
> + self.emulator.boot(arch="aarch64",
> + kernel=kern,
> + options=qemu_opts)
> + self.emulator.login()
> +
> + # Test the program can execute.
> + self.assertRunOk("lkvm --version")
> +
> + # We mount the virtfs to get the Kernel and initramfs from the
> + # test host.
> + self.assertRunOk(f"mount -t 9p {virtfs_tag} /mnt/")
> +
> + # We define an arbitrary kernel command line argument that we
> + # will use to detect we are in our virtual machine.
> + kvm_karg = "br-kvm"
> +
> + # The number of CPU of our virtual machine
> + kvm_nproc = 2
> +
> + # We run the KVM virtual machine
> + cmd = "lkvm run"
> + cmd += " --kernel /mnt/Image"
> + cmd += " --initrd /mnt/rootfs.cpio"
> + cmd += f" --cpus {kvm_nproc}"
> + cmd += " --mem 320M"
> + cmd += " --console virtio"
> + cmd += " --irqchip gicv3"
> + cmd += f" --params {kvm_karg}"
> +
> + # We use qemu.sendline() to run the command because the
> + # program will not return an exit code. The command "lkvm run"
> + # will spawn the new virtual machine console. The login is
> + # expected to be reached after the command is issued.
> + self.emulator.qemu.sendline(cmd)
> +
> + # We login in the virtual machine.
> + self.emulator.login()
> +
> + # We check we can see our kernel argument.
> + out, ret = self.emulator.run("cat /proc/cmdline")
> + self.assertEqual(ret, 0)
> + self.assertIn(kvm_karg, out[0])
> +
> + # We check the virtual machine has the expected number of CPU.
> + out, ret = self.emulator.run("nproc")
> + self.assertEqual(ret, 0)
> + self.assertEqual(int(out[0]), kvm_nproc)
> diff --git a/support/testing/tests/package/test_kvmtool/linux-kvm.fragment b/support/testing/tests/package/test_kvmtool/linux-kvm.fragment
> new file mode 100644
> index 0000000000..8058ac41c3
> --- /dev/null
> +++ b/support/testing/tests/package/test_kvmtool/linux-kvm.fragment
> @@ -0,0 +1,6 @@
> +CONFIG_VIRTUALIZATION=y
> +CONFIG_KVM=y
> +CONFIG_NET_9P=y
> +CONFIG_NET_9P_VIRTIO=y
> +CONFIG_9P_FS=y
> +CONFIG_9P_FS_POSIX_ACL=y
> diff --git a/support/testing/tests/package/test_kvmtool/rootfs-overlay/etc/profile.d/stty-raw.sh b/support/testing/tests/package/test_kvmtool/rootfs-overlay/etc/profile.d/stty-raw.sh
> new file mode 100644
> index 0000000000..24d72995e6
> --- /dev/null
> +++ b/support/testing/tests/package/test_kvmtool/rootfs-overlay/etc/profile.d/stty-raw.sh
> @@ -0,0 +1,3 @@
> +# Avoid double-cooking the terminal, otherwise the test infrastructure
> +# would not be able to retrieve return codes properly.
> +grep -Fq br-kvm /proc/cmdline && stty raw
> --
> 2.52.0
>
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
next prev parent reply other threads:[~2026-01-07 17:49 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-16 23:14 [Buildroot] [PATCH 1/3] package/kvmtool: remove unneeded KVMTOOL_EXTRA_LDFLAGS Julien Olivain via buildroot
2025-12-16 23:14 ` [Buildroot] [PATCH 2/3] package/kvmtool: bump to git version 7ad32e5514 Julien Olivain via buildroot
2025-12-16 23:14 ` [Buildroot] [PATCH 3/3] support/testing: new kvmtool runtime test Julien Olivain via buildroot
2026-01-07 17:49 ` Arnout Vandecappelle via buildroot [this message]
2025-12-28 22:23 ` [Buildroot] [PATCH 1/3] package/kvmtool: remove unneeded KVMTOOL_EXTRA_LDFLAGS Thomas Petazzoni via buildroot
2026-01-07 17:49 ` Arnout Vandecappelle via buildroot
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=20260107174934.225366-1-arnout@rnout.be \
--to=buildroot@buildroot.org \
--cc=arnout@rnout.be \
--cc=ju.o@free.fr \
/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