From 11426fcb5b25a6c9931694ad20c0e42bf5cf73f3 Mon Sep 17 00:00:00 2001 From: Mike Engel Date: Fri, 9 Aug 2024 14:57:45 +0200 Subject: [PATCH] recovery: add initramfs into FIT recovery image This commit adds the initramfs into the FIT recovery image. If the RAM disk image is included in the FIT image we need to create a initramfs file that doesn't include the u-boot header, because the FIT descriptor contains all the necessary information to use the initramfs file. https://onedigi.atlassian.net/browse/DEL-9168 Signed-off-by: Mike Engel --- .../classes/image_types_digi.bbclass | 20 ++++++++++++------- meta-digi-arm/conf/machine/include/ccimx6.inc | 3 +++ .../conf/machine/include/ccimx6ul.inc | 3 +++ .../conf/machine/include/ccimx8m.inc | 3 +++ .../conf/machine/include/ccimx8x.inc | 3 +++ meta-digi-arm/conf/machine/include/ccimx9.inc | 3 +++ meta-digi-arm/conf/machine/include/ccmp1.inc | 3 +++ meta-digi-dey/conf/distro/dey.conf | 2 ++ .../images/dey-image-recovery-initramfs.bb | 6 +++++- 9 files changed, 38 insertions(+), 8 deletions(-) diff --git a/meta-digi-arm/classes/image_types_digi.bbclass b/meta-digi-arm/classes/image_types_digi.bbclass index 236164dc1..8d38f572c 100644 --- a/meta-digi-arm/classes/image_types_digi.bbclass +++ b/meta-digi-arm/classes/image_types_digi.bbclass @@ -89,7 +89,7 @@ do_image_boot_ubifs[depends] += " \ IMAGE_CMD:boot.ubifs() { BOOTIMG_FILES_SYMLINK="${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin" - # Exclude DTB and DTBO from UBIFS image when creating a FIT image + # Exclude DTB and DTBO from final image, when creating a FIT file if [ "${KERNEL_IMAGETYPE}" != "fitImage" ]; then if [ -n "${KERNEL_DEVICETREE}" ]; then for DTB in ${KERNEL_DEVICETREE}; do @@ -116,7 +116,7 @@ IMAGE_CMD:boot.ubifs() { ln ${orig} ${TMP_BOOTDIR}/$(basename ${item}) done - # Exclude boot scripts from UBIFS image when creating a FIT image + # Exclude boot scripts from final image, when creating a FIT file if [ "${KERNEL_IMAGETYPE}" != "fitImage" ]; then # Hard-link boot scripts into the temporary folder for item in ${BOOT_SCRIPTS}; do @@ -167,8 +167,12 @@ do_image_recovery_ubifs[depends] += " \ " IMAGE_CMD:recovery.ubifs() { - RECOVERYIMG_FILES_SYMLINK="${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin" - # Exclude DTB and DTBO from VFAT image when creating a FIT image + if [ "${KERNEL_IMAGETYPE}" = "fitImage" ]; then + RECOVERYIMG_FILES_SYMLINK="${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${RECOVERY_INITRAMFS_IMAGE}-${MACHINE}-${MACHINE}" + else + RECOVERYIMG_FILES_SYMLINK="${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin" + fi + # Exclude DTB and DTBO from final image, when creating a FIT file if [ "${KERNEL_IMAGETYPE}" != "fitImage" ]; then if [ -n "${KERNEL_DEVICETREE}" ]; then for DTB in ${KERNEL_DEVICETREE}; do @@ -190,15 +194,17 @@ IMAGE_CMD:recovery.ubifs() { ln ${orig} ${TMP_RECOVERYDIR}/$(basename ${item}) done - # Exclude bootscript from VFAT image when creating a FIT image - if [ "${KERNEL_IMAGETYPE}" != "fitImage" ]; then + # Exclude bootscript from final image when creating a FIT file + if [ "${KERNEL_IMAGETYPE}" = "fitImage" ]; then + # rename FITimage to u-boot default kernel load name + mv ${TMP_RECOVERYDIR}/${KERNEL_IMAGETYPE}-${RECOVERY_INITRAMFS_IMAGE}-${MACHINE}-${MACHINE} ${TMP_RECOVERYDIR}/${KERNEL_IMAGETYPE}-${MACHINE}.bin + else # Hard-link boot scripts into the temporary folder for item in ${BOOT_SCRIPTS}; do src="$(echo ${item} | awk -F':' '{ print $1 }')" dst="$(echo ${item} | awk -F':' '{ print $2 }')" ln ${DEPLOY_DIR_IMAGE}/${src} ${TMP_RECOVERYDIR}/${dst} done - # Copy the recovery initramfs into the temporary folder cp ${DEPLOY_DIR_IMAGE}/${RECOVERY_INITRAMFS_IMAGE}-${MACHINE}.cpio.gz.u-boot.tf ${TMP_RECOVERYDIR}/uramdisk-recovery.img fi diff --git a/meta-digi-arm/conf/machine/include/ccimx6.inc b/meta-digi-arm/conf/machine/include/ccimx6.inc index 4f5161631..9169db2ed 100644 --- a/meta-digi-arm/conf/machine/include/ccimx6.inc +++ b/meta-digi-arm/conf/machine/include/ccimx6.inc @@ -16,6 +16,9 @@ UBOOT_SUFFIX = "imx" BOOTABLE_FILENAME = "${UBOOT_PREFIX}-${MACHINE}.${UBOOT_SUFFIX}" SDIMG_BOOTLOADER = "${DEPLOY_DIR_IMAGE}/${BOOTABLE_FILENAME}" +# Set InitRAMDisk load address to U-boot initramfs_addr +UBOOT_RD_LOADADDRESS = "0x19000000" + # Linux kernel configuration KERNEL_DEFCONFIG ?= "arch/arm/configs/ccimx6sbc_defconfig" diff --git a/meta-digi-arm/conf/machine/include/ccimx6ul.inc b/meta-digi-arm/conf/machine/include/ccimx6ul.inc index 8bdbb3efe..69538f9a0 100644 --- a/meta-digi-arm/conf/machine/include/ccimx6ul.inc +++ b/meta-digi-arm/conf/machine/include/ccimx6ul.inc @@ -16,6 +16,9 @@ INIT_MANAGER ?= "sysvinit" UBOOT_PREFIX = "u-boot" UBOOT_SUFFIX = "imx" +# Set InitRAMDisk load address to U-boot initramfs_addr +UBOOT_RD_LOADADDRESS = "0x83800000" + STORAGE_MEDIA = "mtd" # Wireless external module diff --git a/meta-digi-arm/conf/machine/include/ccimx8m.inc b/meta-digi-arm/conf/machine/include/ccimx8m.inc index ce88fff5e..bb2d79f7c 100644 --- a/meta-digi-arm/conf/machine/include/ccimx8m.inc +++ b/meta-digi-arm/conf/machine/include/ccimx8m.inc @@ -17,6 +17,9 @@ BOOTLOADER_IMAGE_RECIPE = "imx-boot" BOOTABLE_FILENAME = "${UBOOT_PREFIX}-${MACHINE}.bin" SDIMG_BOOTLOADER = "${DEPLOY_DIR_IMAGE}/${BOOTABLE_FILENAME}" +# Set InitRAMDisk load address to U-boot initramfs_addr +UBOOT_RD_LOADADDRESS = "0x43800000" + # LPDDR4 firmware DDR_FIRMWARE_NAME = " \ lpddr4_pmu_train_1d_imem.bin \ diff --git a/meta-digi-arm/conf/machine/include/ccimx8x.inc b/meta-digi-arm/conf/machine/include/ccimx8x.inc index 36f9c1bfb..d3450bcbd 100644 --- a/meta-digi-arm/conf/machine/include/ccimx8x.inc +++ b/meta-digi-arm/conf/machine/include/ccimx8x.inc @@ -13,6 +13,9 @@ include conf/machine/include/arm/armv8a/tune-cortexa35.inc UBOOT_PREFIX = "imx-boot" UBOOT_SUFFIX = "bin" +# Set InitRAMDisk load address to U-boot initrd_addr +UBOOT_RD_LOADADDRESS = "0x8A100000" + # The bootloader image that gets flashed consists of U-Boot and several fw binaries EXTRA_IMAGEDEPENDS += "imx-boot" BOOTLOADER_IMAGE_RECIPE = "imx-boot" diff --git a/meta-digi-arm/conf/machine/include/ccimx9.inc b/meta-digi-arm/conf/machine/include/ccimx9.inc index ccd45d4bf..3079142a9 100644 --- a/meta-digi-arm/conf/machine/include/ccimx9.inc +++ b/meta-digi-arm/conf/machine/include/ccimx9.inc @@ -15,6 +15,9 @@ UBOOT_ENV = "boot" UBOOT_PREFIX = "imx-boot" UBOOT_SUFFIX = "bin" +# Set InitRAMDisk load address to U-boot initrd_addr +UBOOT_RD_LOADADDRESS = "0x83800000" + # Platform kernel settings (keep the override as otherwise KERNEL_IMAGETYPE # from imx-digi-base.inc takes precedence) KERNEL_CLASSES = "kernel-fitimage" diff --git a/meta-digi-arm/conf/machine/include/ccmp1.inc b/meta-digi-arm/conf/machine/include/ccmp1.inc index 93a33dd36..88f39305c 100644 --- a/meta-digi-arm/conf/machine/include/ccmp1.inc +++ b/meta-digi-arm/conf/machine/include/ccmp1.inc @@ -42,6 +42,9 @@ UBOOT_ENV_SIZE ?= "0x20000" # available space in the environment partition) UBOOT_ENV_RANGE ?= "" +# Set InitRAMDisk load address to U-boot initrd_addr +UBOOT_RD_LOADADDRESS = "0xc4400000" + # OPTEE runtime packages to install OPTEE_PKGS ??= "optee-client" diff --git a/meta-digi-dey/conf/distro/dey.conf b/meta-digi-dey/conf/distro/dey.conf index 6e5b3fa2c..c59ef34eb 100644 --- a/meta-digi-dey/conf/distro/dey.conf +++ b/meta-digi-dey/conf/distro/dey.conf @@ -37,6 +37,8 @@ GRAPHICAL_BACKEND = "${@bb.utils.contains('DISTRO_FEATURES', 'x11 wayland', 'xwa # Recovery initramfs image name. RECOVERY_INITRAMFS_IMAGE ?= "dey-image-recovery-initramfs" +# Add initramfs into FIT image +INITRAMFS_IMAGE = '${@bb.utils.contains("KERNEL_IMAGETYPE", "fitImage", "${RECOVERY_INITRAMFS_IMAGE}", "", d)}' # DEY image features (alphabetical order) FEATURE_PACKAGES_dey-audio = "packagegroup-dey-audio" diff --git a/meta-digi-dey/recipes-core/images/dey-image-recovery-initramfs.bb b/meta-digi-dey/recipes-core/images/dey-image-recovery-initramfs.bb index e8b06aeb9..ff8ec23be 100644 --- a/meta-digi-dey/recipes-core/images/dey-image-recovery-initramfs.bb +++ b/meta-digi-dey/recipes-core/images/dey-image-recovery-initramfs.bb @@ -20,7 +20,11 @@ IMAGE_FEATURES = "" IMAGE_LINGUAS = "" python() { - d.setVar('IMAGE_FSTYPES', 'cpio.gz.u-boot.tf') + # If Kernel image is FIT create different initramfs file without u-boot header + if (d.getVar("KERNEL_IMAGETYPE") == "fitImage"): + d.setVar('IMAGE_FSTYPES', 'cpio.gz') + else: + d.setVar('IMAGE_FSTYPES', 'cpio.gz.u-boot.tf') } inherit core-image image_types