From: Adrian Freihofer <[email protected]>

Assembling the fitImage with initramfs requires the linux.bin and the
corresponding DTB files. To avoid that the kernel gets re-built from
scratch whenever the initramfs changes, these files must be sstate
cached after the kernel is built, before the fitImage gets assembled.

Therefore the uboot_prep_kimage needs to be split:
- a function creating the linux.bin artifact
- a function which can find the linux.bin file from an independent task
  later on.

This will allow to run the do_assemble_fitimage_initramfs task from the
deploy folder where the linux.bin and the DTBs are provided via
sstate-cache.

Signed-off-by: Adrian Freihofer <[email protected]>
---
 meta/classes-recipe/kernel-fitimage.bbclass |  8 ++++----
 meta/classes-recipe/kernel-uboot.bbclass    | 17 +++++++++++++++++
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/meta/classes-recipe/kernel-fitimage.bbclass 
b/meta/classes-recipe/kernel-fitimage.bbclass
index e084dc57573..64836f6bef0 100644
--- a/meta/classes-recipe/kernel-fitimage.bbclass
+++ b/meta/classes-recipe/kernel-fitimage.bbclass
@@ -165,12 +165,12 @@ EOF
 # $1 ... .its filename
 # $2 ... Image counter
 # $3 ... Path to kernel image
-# $4 ... Compression type
 fitimage_emit_section_kernel() {
 
        kernel_csum="${FIT_HASH_ALG}"
        kernel_sign_algo="${FIT_SIGN_ALG}"
        kernel_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
+       get_linux_comp
 
        ENTRYPOINT="${UBOOT_ENTRYPOINT}"
        if [ -n "${UBOOT_ENTRYSYMBOL}" ]; then
@@ -186,7 +186,7 @@ fitimage_emit_section_kernel() {
                         type = "${UBOOT_MKIMAGE_KERNEL_TYPE}";
                         arch = "${UBOOT_ARCH}";
                         os = "linux";
-                        compression = "$4";
+                        compression = "$linux_comp";
                         load = <${UBOOT_LOADADDRESS}>;
                         entry = <$ENTRYPOINT>;
                         hash-1 {
@@ -585,8 +585,6 @@ fitimage_assemble() {
        # Step 1: Prepare a kernel image section.
        #
        fitimage_emit_section_maint $1 imagestart
-
-       uboot_prep_kimage
        fitimage_emit_section_kernel $1 $kernelcount "$(readlink -f linux.bin)" 
"$linux_comp"
 
        #
@@ -785,6 +783,7 @@ fitimage_assemble() {
 do_assemble_fitimage() {
        if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
                cd ${B}
+               uboot_prep_kimage
                fitimage_assemble fit-image.its 
"${KERNEL_OUTPUT_DIR}/fitImage-none" ""
                if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
                        ln -sf fitImage-none 
"${B}/${KERNEL_OUTPUT_DIR}/fitImage"
@@ -806,6 +805,7 @@ do_assemble_fitimage_initramfs() {
        if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage" && \
                test -n "${INITRAMFS_IMAGE}" ; then
                cd ${B}
+               uboot_prep_kimage
                if [ "${INITRAMFS_IMAGE_BUNDLE}" = "1" ]; then
                        fitimage_assemble "fit-image-${INITRAMFS_IMAGE}.its" 
"${KERNEL_OUTPUT_DIR}/fitImage-bundle" ""
                        ln -sf fitImage-bundle 
"${B}/${KERNEL_OUTPUT_DIR}/fitImage"
diff --git a/meta/classes-recipe/kernel-uboot.bbclass 
b/meta/classes-recipe/kernel-uboot.bbclass
index 30a85ccc287..e692ca27cdd 100644
--- a/meta/classes-recipe/kernel-uboot.bbclass
+++ b/meta/classes-recipe/kernel-uboot.bbclass
@@ -47,3 +47,20 @@ uboot_prep_kimage() {
 
        echo "${linux_comp}"
 }
+
+# Get the linux_comp variable back from the linux.bin file
+# which was created by uboot_prep_kimage
+get_linux_comp() {
+       if [ ! -e linux.bin ]; then
+           bbfatal "linux.bin does not exist $(pwd)"
+       fi
+
+       linux_comp=none
+       if gzip -l linux.bin> /dev/null 2>&1; then
+               linux_comp=gzip
+       elif lzop -l linux.bin> /dev/null 2>&1; then
+               linux_comp=lzo
+       fi
+
+       echo "${linux_comp}"
+}
-- 
2.45.2

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#201515): 
https://lists.openembedded.org/g/openembedded-core/message/201515
Mute This Topic: https://lists.openembedded.org/mt/107033896/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to