On Tue, 2026-07-07 at 13:29 +0200, Nora Schiffer via
lists.openembedded.org wrote:
> U-Boot can load an EFI application from a FIT image; this requires
> setting the OS to "efi" (usually in combination with type
> "kernel_noload"). Doing so is a convenient approach for giving the OS
> access to EFI services while preserving other benefits of FIT image
> boot.
>
> Signed-off-by: Nora Schiffer <[email protected]>
> ---
> meta/classes-recipe/kernel-fit-image.bbclass | 3 ++-
> meta/conf/image-fitimage.conf | 4 ++++
> meta/lib/oe/fitimage.py | 11 ++++++-----
> meta/lib/oeqa/selftest/cases/fitimage.py | 13 +++++++++++--
> 4 files changed, 23 insertions(+), 8 deletions(-)
>
> diff --git a/meta/classes-recipe/kernel-fit-image.bbclass
> b/meta/classes-recipe/kernel-fit-image.bbclass
> index 448a88ccb1..899516e372 100644
> --- a/meta/classes-recipe/kernel-fit-image.bbclass
> +++ b/meta/classes-recipe/kernel-fit-image.bbclass
> @@ -69,7 +69,8 @@ python do_compile() {
> # Collect all the its nodes before the its file is generated and
> mkimage gets executed
> root_node = oe.fitimage.ItsNodeRootKernel(
> d.getVar("FIT_DESC"), d.getVar("FIT_ADDRESS_CELLS"),
> - d.getVar('HOST_PREFIX'), d.getVar('UBOOT_ARCH'),
> d.getVar("FIT_CONF_PREFIX"),
> + d.getVar('HOST_PREFIX'), d.getVar('UBOOT_ARCH'),
> d.getVar('FIT_OS'),
> + d.getVar("FIT_CONF_PREFIX"),
> oe.types.boolean(d.getVar('FIT_KERNEL_SIGN_ENABLE')),
> d.getVar("FIT_KERNEL_SIGN_KEYDIR"),
> d.getVar("UBOOT_MKIMAGE"),
> d.getVar("UBOOT_MKIMAGE_DTCOPTS"),
> d.getVar('FIT_MKIMAGE_EXTRA_OPTS'),
> diff --git a/meta/conf/image-fitimage.conf b/meta/conf/image-
> fitimage.conf
> index 2fdb816d55..a06d30e494 100644
> --- a/meta/conf/image-fitimage.conf
> +++ b/meta/conf/image-fitimage.conf
> @@ -37,6 +37,10 @@ FIT_CONF_PREFIX[doc] = "Prefix to use for FIT
> configuration node name"
>
> FIT_SUPPORTED_INITRAMFS_FSTYPES ?= "cpio.lz4 cpio.lzo cpio.lzma
> cpio.xz cpio.zst cpio.gz ext2.gz cpio"
>
> +# os field of the kernel and various other images in the FIT image.
> Set to "efi"
> +# to load a kernel with EFI stub as an EFI application.
> +FIT_OS ?= "linux"
> +
> # Allow user to support special use cases where the kernel binary is
> # not included in the FIT image itself.
> # This is particularly useful for UKI-based setups, where the kernel
> diff --git a/meta/lib/oe/fitimage.py b/meta/lib/oe/fitimage.py
> index 81d18f6c91..86a0e44e12 100644
> --- a/meta/lib/oe/fitimage.py
> +++ b/meta/lib/oe/fitimage.py
> @@ -153,7 +153,7 @@ class ItsNodeRootKernel(ItsNode):
> If a device tree included in the FIT image, the default
> configuration is the
> firt DTB. If there is no dtb present than the default
> configuation the kernel.
> """
> - def __init__(self, description, address_cells, host_prefix,
> arch, conf_prefix,
> + def __init__(self, description, address_cells, host_prefix,
> arch, os, conf_prefix,
Should we use "os" as a variable name? What happens if
import os
os = "efi" ?
os.path.join(...)
To be on the save side, I would suggest to use fit_os, for example.
Thank you for the patch. I think this needs a v2 because of this
detail. But otherwise it looks good to me.
Sorry for the late response,
Adrian
> sign_enable=False, sign_keydir=None,
> mkimage=None, mkimage_dtcopts=None,
> mkimage_extra_opts=None,
> @@ -171,6 +171,7 @@ class ItsNodeRootKernel(ItsNode):
>
> self._host_prefix = host_prefix
> self._arch = arch
> + self._os = os
> self._conf_prefix = conf_prefix
>
> # Signature related properties
> @@ -279,7 +280,7 @@ class ItsNodeRootKernel(ItsNode):
> opt_props = {
> "data": '/incbin/("' + kernel_path + '")',
> "arch": self._arch,
> - "os": "linux",
> + "os": self._os,
> }
> if load:
> opt_props["load"] = f"<{load}>"
> @@ -370,7 +371,7 @@ class ItsNodeRootKernel(ItsNode):
> {
> "data": '/incbin/("' + setup_path + '")',
> "arch": self._arch,
> - "os": "linux",
> + "os": self._os,
> "load": load,
> "entry": entry
> }
> @@ -385,7 +386,7 @@ class ItsNodeRootKernel(ItsNode):
> "data": '/incbin/("' + ramdisk_path + '")',
> "type": "ramdisk",
> "arch": self._arch,
> - "os": "linux"
> + "os": self._os,
> }
> if load:
> opt_props["load"] = f"<{load}>"
> @@ -406,7 +407,7 @@ class ItsNodeRootKernel(ItsNode):
> opt_props = {
> "data": '/incbin/("' + filepath + '")',
> "arch": arch if arch is not None else self._arch,
> - "os": os if os is not None else "linux",
> + "os": os if os is not None else self._os,
> }
>
> if load:
> diff --git a/meta/lib/oeqa/selftest/cases/fitimage.py
> b/meta/lib/oeqa/selftest/cases/fitimage.py
> index c5f2975223..d28b5b8965 100644
> --- a/meta/lib/oeqa/selftest/cases/fitimage.py
> +++ b/meta/lib/oeqa/selftest/cases/fitimage.py
> @@ -670,6 +670,7 @@ class KernelFitImageBase(FitImageTestCase):
> 'FIT_LOADABLES',
> 'FIT_LOADABLE_ENTRYPOINT',
> 'FIT_LOADABLE_LOADADDRESS',
> + 'FIT_OS',
> 'FIT_SIGN_ALG',
> 'FIT_SIGN_INDIVIDUAL',
> 'FIT_UBOOT_ENV',
> @@ -904,7 +905,7 @@ class KernelFitImageBase(FitImageTestCase):
> # 'compression = "' +
> str(bb_vars['FIT_KERNEL_COMP_ALG']) + '";', defined based on files in
> TMPDIR, not ideal...
> 'data = /incbin/("linux.bin");',
> 'arch = "' + str(bb_vars['UBOOT_ARCH']) + '";',
> - 'os = "linux";',
> + 'os = "%s";' % bb_vars['FIT_OS'],
> 'load = <' + str(bb_vars['UBOOT_LOADADDRESS']) + '>;',
> 'entry = <' + str(bb_vars['UBOOT_ENTRYPOINT']) + '>;',
> ]
> @@ -1463,6 +1464,7 @@ class FitImagePyTests(KernelFitImageBase):
> 'FIT_KEY_SIGN_PKCS': "-x509",
> 'FIT_LOADABLES': "",
> 'FIT_LINUX_BIN': "linux.bin",
> + 'FIT_OS': "linux",
> 'FIT_PAD_ALG': "pkcs-1.5",
> 'FIT_SIGN_ALG': "rsa2048",
> 'FIT_SIGN_INDIVIDUAL': "0",
> @@ -1503,7 +1505,8 @@ class FitImagePyTests(KernelFitImageBase):
>
> root_node = oe.fitimage.ItsNodeRootKernel(
> bb_vars["FIT_DESC"], bb_vars["FIT_ADDRESS_CELLS"],
> - bb_vars['HOST_PREFIX'], bb_vars['UBOOT_ARCH'],
> bb_vars["FIT_CONF_PREFIX"],
> + bb_vars['HOST_PREFIX'], bb_vars['UBOOT_ARCH'],
> bb_vars['FIT_OS'],
> + bb_vars["FIT_CONF_PREFIX"],
> oe.types.boolean(bb_vars['UBOOT_SIGN_ENABLE']),
> bb_vars["UBOOT_SIGN_KEYDIR"],
> bb_vars["UBOOT_MKIMAGE"],
> bb_vars["UBOOT_MKIMAGE_DTCOPTS"],
> bb_vars["UBOOT_MKIMAGE_SIGN"],
> bb_vars["UBOOT_MKIMAGE_SIGN_ARGS"],
> @@ -1609,6 +1612,12 @@ class FitImagePyTests(KernelFitImageBase):
> }
> self._test_fitimage_py(bb_vars_overrides)
>
> + def test_fitimage_py_conf_os(self):
> + """Test FIT_OS functionality"""
> + bb_vars_overrides = {
> + 'FIT_OS': "efi",
> + }
> + self._test_fitimage_py(bb_vars_overrides)
>
> class UBootFitImageTests(FitImageTestCase):
> """Test cases for the uboot-sign bbclass"""
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#241299):
https://lists.openembedded.org/g/openembedded-core/message/241299
Mute This Topic: https://lists.openembedded.org/mt/120154469/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-