diff mbox series

[5/5] oe-selftest: add a beaglebone-yocto fitimage Qemu test

Message ID 20250620080840.562802-6-adrian.freihofer@siemens.com
State New
Headers show
Series FIT image beaglebone-yocto | expand

Commit Message

AdrianF June 20, 2025, 8:08 a.m. UTC
From: Adrian Freihofer <adrian.freihofer@siemens.com>

The kernel configuration of the beaglebone-yocto MACHINE supports booting
on real hardware as well as in Qemu. Add an oe-selftest which tests that
booting in Qemu is possible even when the kernel is a FIT image kernel
with a RAM disk.
Since Qemu does not support FIT images, Qemu boots the zImage in direct
kernel mode. This works with or without initramfs.

Signed-off-by: Adrian Freihofer <adrian.freihofer@siemens.com>
---
 meta/lib/oeqa/selftest/cases/fitimage.py | 37 ++++++++++++++++++++++--
 1 file changed, 34 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/meta/lib/oeqa/selftest/cases/fitimage.py b/meta/lib/oeqa/selftest/cases/fitimage.py
index 3c408577476..9e0db30258e 100644
--- a/meta/lib/oeqa/selftest/cases/fitimage.py
+++ b/meta/lib/oeqa/selftest/cases/fitimage.py
@@ -9,13 +9,12 @@  import re
 import shlex
 import logging
 import pprint
-import tempfile
 
 import oe.fitimage
 
 from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import runCmd, bitbake, get_bb_vars, get_bb_var
-
+from oeqa.utils.commands import runCmd, bitbake, get_bb_vars, get_bb_var, runqemu, runqemu_check_taps
+from oeqa.core.decorator import OETestTag
 
 class BbVarsMockGenKeys:
     def __init__(self, keydir, gen_keys="0", sign_enabled="0", keyname="", sign_ind="0", img_keyname=""):
@@ -1020,6 +1019,38 @@  FIT_HASH_ALG = "sha256"
         self._gen_signing_key(bb_vars)
         self._test_fitimage(bb_vars)
 
+    @OETestTag("runqemu")
+    def test_fit_image_initramfs_qemu(self):
+        """
+        Summary:     Verify building an image including a FIT image kernel and booting in Qemu works.
+        Expected:    1. core-image-minimal including a FIT image in /boot gets built
+                     2. Qemu can boot the zImage and initramfs with direct kernel boot
+                        since Qemu does not support FIT images
+        """
+
+        config = """
+DISTRO = "poky"
+MACHINE = "beaglebone-yocto"
+INITRAMFS_IMAGE = "core-image-initramfs-boot"
+FIT_IMAGE_KERNEL = "1"
+# Do not override kernel command line network configuration
+BAD_RECOMMENDATIONS:append:pn-oe-selftest-image = " init-ifupdown"
+"""
+        self.write_config(config)
+        if not runqemu_check_taps():
+            self.skipTest('No tap devices found - you must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
+        testimage = "oe-selftest-image"
+        bitbake(testimage)
+        # Boot the image
+        with runqemu(testimage) as qemu:
+            # Run a test command to see if it was installed properly
+            sshargs = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
+            result = runCmd('ssh %s root@%s %s' % (sshargs, qemu.ip, "ls -1 /boot"))
+            self.logger.debug("ls -1 /boot: %s" % str(result.output))
+            boot_files = result.output.splitlines()
+            self.assertIn("fitImage", boot_files)
+            self.assertNotIn("zImage", boot_files)
+
 class FitImagePyTests(KernelFitImageBase):
     """Test cases for the fitimage.py module without calling bitbake"""