Re: [RFC PATCH 1/1] kernel: add kernel-image-fitimage-initramfs

Claudius Heine
2022-04-13T15:48:07Z

Hi,

On 2022-03-30 11:15, Claudius Heine wrote:
> When creating an initramfs bundled into a kernel fitimage, the resulting
> fitimage will only be placed into the deploy directory and not packaged
> by the kernel recipe/class.
>
> Changing the kernel recipe/class to produce a package with the fitimage
> containing the initramfs is not possible, because build dependencies
> require the kernel packages to be already build before the initramfs can
> be created.
>
> The kernel-image-fitimage-initramfs recipe solves this dependency cycle
> by packaging the fitimage with the embedded initramfs from the deploy
> directory and replaces the `kernel-image` and `kernel-image-fitimage`
> packages from the kernel recipe/class.

This patch was on master-next for a short while, any feedback on it?

In the cover letter I stated the only downside of this solution is, that
in case of package based updating, it would require manually changing
the version of this recipe.

Is this an acceptable downside, or is there a good way to fix this?

regards,
Claudius

>
> Signed-off-by: Claudius Heine <ch@denx.de>
> ---
> .../kernel-image-fitimage-initramfs_0.1.0.bb | 50 +++++++++++++++++++
> 1 file changed, 50 insertions(+)
> create mode 100644 meta/recipes-kernel/kernel-image-fitimage-initramfs/kernel-image-fitimage-initramfs_0.1.0.bb
>
> diff --git a/meta/recipes-kernel/kernel-image-fitimage-initramfs/kernel-image-fitimage-initramfs_0.1.0.bb b/meta/recipes-kernel/kernel-image-fitimage-initramfs/kernel-image-fitimage-initramfs_0.1.0.bb
> new file mode 100644
> index 0000000000..c25168301b
> --- /dev/null
> +++ b/meta/recipes-kernel/kernel-image-fitimage-initramfs/kernel-image-fitimage-initramfs_0.1.0.bb
> @@ -0,0 +1,50 @@
> +# Copyright (C) 2022 Claudius Heine <ch@denx.de>
> +# Released under the MIT license (see COPYING.MIT for the terms)
> +
> +SUMMARY = "Packages the fitimage with embedded initramfs"
> +LICENSE = "GPL-2.0-only"
> +DEPENDS = "virtual/kernel"
> +
> +SRC_URI = ""
> +
> +inherit kernel-artifact-names
> +INITRAMFS_IMAGE_NAME ?= "${@['${INITRAMFS_IMAGE}-${MACHINE}', ''][d.getVar('INITRAMFS_IMAGE') == '']}"
> +KERNEL_PACKAGE_NAME ?= "kernel"
> +
> +PN = "${KERNEL_PACKAGE_NAME}-image-fitimage-initramfs"
> +
> +do_configure[noexec] = "1"
> +do_compile[noexec] = "1"
> +
> +do_install[deptask] = "do_deploy"
> +do_install() {
> + fitimage="$(readlink "${DEPLOY_DIR_IMAGE}/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}")"
> + install -d ${D}/boot
> + install -m 0644 \
> + ${DEPLOY_DIR_IMAGE}/${fitimage} \
> + ${D}/boot/
> + ln -snf \
> + ${fitimage} \
> + ${D}/boot/fitImage
> +}
> +
> +PACKAGES += "${KERNEL_PACKAGE_NAME}-image-initramfs"
> +
> +FILES:${PN} = "/boot/fitImage /boot/fitImage-*"
> +RPROVIDES:${PN} = "${KERNEL_PACKAGE_NAME}-image-fitimage"
> +RCONFLICTS:${PN} = "${KERNEL_PACKAGE_NAME}-image-fitimage"
> +RREPLACES:${PN} = "${KERNEL_PACKAGE_NAME}-image-fitimage"
> +
> +RDEPENDS:${KERNEL_PACKAGE_NAME}-image-initramfs = "${KERNEL_PACKAGE_NAME}-image-fitimage-initramfs (= ${EXTENDPGKV})"
> +RPROVIDES:${KERNEL_PACKAGE_NAME}-image-initramfs = "${KERNEL_PACKAGE_NAME}-image"
> +RCONFLICTS:${KERNEL_PACKAGE_NAME}-image-initramfs = "${KERNEL_PACKAGE_NAME}-image"
> +RREPLACES:${KERNEL_PACKAGE_NAME}-image-initramfs = "${KERNEL_PACKAGE_NAME}-image"
> +ALLOW_EMPTY:${KERNEL_PACKAGE_NAME}-image-initramfs = "1"
> +
> +python() {
> + if (not 'fitImage' in d.getVar('KERNEL_IMAGETYPES') or
> + bb.utils.to_boolean(d.getVar('INITRAMFS_IMAGE_BUNDLE'))):
> + raise bb.parse.SkipRecipe('Requires generation of fitImage and bundled initramfs.')
> + if not d.getVar('KERNEL_FIT_LINK_NAME'):
> + raise bb.parse.SkipRecipe('Requires generation of fitImage symlink in deploy dir.')
> +}