On Wed, Sep 08, 2021 at 04:53:16PM +0200, Kristian Klausen wrote:
> "A unified kernel image is a single EFI PE executable combining an EFI
> stub loader, a kernel image, an initramfs image, and the kernel command
> line.
> 
> [...]
> 
> Images of this type have the advantage that all metadata and payload
> that makes up the boot entry is monopolized in a single PE file that can
> be signed cryptographically as one for the purpose of EFI
> SecureBoot."[1]
> 
> The cmdline can be set with the UNIFIED_KERNEL_IMAGE_CMDLINE variable.
> 
> [1] 
> https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-2-efi-unified-kernel-images
> 
> Signed-off-by: Kristian Klausen <krist...@klausen.dk>
> ---
> 
> This patch is a RFC as I'm unsure if this is the best way to do it.
> 
> Ideally creating the UKI would happen in the do_install task, but the
> initramfs must be built and adding before
> ${INITRAMFS_IMAGE}:do_image_complete causes a circular dependency.
> 
> Ideally UNIFIED_KERNEL_IMAGE_CMDLINE would also default to ${APPEND} but
> I couldn't get it to work.
> 
> As hinted in the commit message we need this for Secure Boot.

This patch has been superseded by:
"[PATCH] wic/bootimg-efi: Add Unified Kernel Image option"[1]

[1] 
https://lists.openembedded.org/g/openembedded-core/topic/patch_wic_bootimg_efi_add/85490739

> 
>  meta/classes/kernel.bbclass | 20 ++++++++++++++++++--
>  1 file changed, 18 insertions(+), 2 deletions(-)
> 
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index d13c38fb02..6126528a35 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -1,4 +1,5 @@
>  inherit linux-kernel-base kernel-module-split
> +require conf/image-uefi.conf
>  
>  COMPATIBLE_HOST = ".*-linux"
>  
> @@ -10,6 +11,7 @@ DEPENDS += "virtual/${TARGET_PREFIX}binutils 
> virtual/${TARGET_PREFIX}gcc kmod-na
>  DEPENDS += "${@bb.utils.contains("INITRAMFS_FSTYPES", "cpio.lzo", 
> "lzop-native", "", d)}"
>  DEPENDS += "${@bb.utils.contains("INITRAMFS_FSTYPES", "cpio.lz4", 
> "lz4-native", "", d)}"
>  DEPENDS += "${@bb.utils.contains("INITRAMFS_FSTYPES", "cpio.zst", 
> "zstd-native", "", d)}"
> +DEPENDS += "${@bb.utils.contains("KERNEL_IMAGETYPE", "bzImage.efi", 
> "systemd-boot binutils os-release", "", d)}"
>  PACKAGE_WRITE_DEPS += "depmodwrapper-cross"
>  
>  do_deploy[depends] += "depmodwrapper-cross:do_populate_sysroot 
> gzip-native:do_populate_sysroot"
> @@ -30,6 +32,7 @@ INITRAMFS_IMAGE ?= ""
>  INITRAMFS_IMAGE_NAME ?= "${@['${INITRAMFS_IMAGE}-${MACHINE}', 
> ''][d.getVar('INITRAMFS_IMAGE') == '']}"
>  INITRAMFS_TASK ?= ""
>  INITRAMFS_IMAGE_BUNDLE ?= ""
> +UNIFIED_KERNEL_IMAGE_CMDLINE ?= ""
>  
>  # KERNEL_VERSION is extracted from source code. It is evaluated as
>  # None for the first parsing, since the code has not been fetched.
> @@ -85,6 +88,8 @@ python __anonymous () {
>          for type in types.split():
>              if type == 'vmlinux.gz':
>                  type = 'vmlinux'
> +            if type == 'bzImage.efi':
> +                type = 'bzImage'
>              typeformake.add(type)
>  
>          d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', ' '.join(sorted(typeformake)))
> @@ -442,7 +447,7 @@ kernel_do_install() {
>       #
>  
>       for imageType in ${KERNEL_IMAGETYPES} ; do
> -             if [ $imageType != "fitImage" ] || [ 
> "${INITRAMFS_IMAGE_BUNDLE}" != "1" ] ; then
> +             if [ $imageType != "bzImage.efi" ] && ([ $imageType != 
> "fitImage" ] || [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]); then
>                       install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType 
> ${D}/${KERNEL_IMAGEDEST}/$imageType-${KERNEL_VERSION}
>               fi
>       done
> @@ -755,7 +760,18 @@ kernel_do_deploy() {
>  
>       for imageType in ${KERNEL_IMAGETYPES} ; do
>               baseName=$imageType-${KERNEL_IMAGE_NAME}
> -             install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType 
> $deployDir/$baseName.bin
> +             if [ "${imageType}" = "bzImage.efi" ]; then
> +                     echo "${UNIFIED_KERNEL_IMAGE_CMDLINE}" > cmdline
> +                     # 
> https://github.com/systemd/systemd/blob/7728f6aa812f1af563821505d9f377a7f4f727d9/test/test-efi-create-disk.sh#L32-L38
> +                     objcopy \
> +                             --add-section 
> .osrel="${RECIPE_SYSROOT}${nonarch_libdir}/os-release" --change-section-vma 
> .osrel=0x20000 \
> +                             --add-section .cmdline="cmdline" 
> --change-section-vma .cmdline=0x30000 \
> +                             --add-section 
> .linux="${KERNEL_OUTPUT_DIR}/bzImage" --change-section-vma .linux=0x2000000 \
> +                             --add-section 
> .initrd="${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES}"
>  --change-section-vma .initrd=0x3000000 \
> +                             "${DEPLOY_DIR_IMAGE}/linux${EFI_ARCH}.efi.stub" 
> "$deployDir/$baseName.bin"
> +             else
> +                     install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType 
> $deployDir/$baseName.bin
> +             fi
>               ln -sf $baseName.bin 
> $deployDir/$imageType-${KERNEL_IMAGE_LINK_NAME}.bin
>               ln -sf $baseName.bin $deployDir/$imageType
>       done
> -- 
> 2.25.1
> 
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#155867): 
https://lists.openembedded.org/g/openembedded-core/message/155867
Mute This Topic: https://lists.openembedded.org/mt/85460819/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to