]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core.git/commitdiff
kernel-uboot.bbclass: do not require the kernel build folder
authorAdrian Freihofer <adrian.freihofer@siemens.com>
Tue, 3 Jun 2025 08:23:21 +0000 (10:23 +0200)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 5 Jun 2025 10:01:24 +0000 (11:01 +0100)
The function must be executed in CWD. Make it more flexible by
specifying the kernel build folder as a parameter.

This is a refactoring without functional change. But later this change
will allow to use this function also with a kernel from the sstate-cache
instead of requiring the full kernel build folder structure.

Another preparation for using a kernel from sstate-cache is to persist
the linux_comp variable in a file next to the linux.bin file rather than
using a global shell variable.

This change also requires to adapt the kernel-uimage.bbclass
accordingly. This change also fixes a minor detail:
the kernel-uimage.bbclass used ${ instead of $ for evaluatiing a local
shell variable.

Signed-off-by: Adrian Freihofer <adrian.freihofer@siemens.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes-recipe/kernel-uboot.bbclass
meta/classes-recipe/kernel-uimage.bbclass

index 6d4aff6b11b6e1635c0de9d7e7b361ca8c33e53f..d2a63524ece3e45d21dc61720a1f6fdd68881c6d 100644 (file)
@@ -12,19 +12,27 @@ FIT_KERNEL_COMP_ALG_EXTENSION ?= ".gz"
 UBOOT_MKIMAGE_KERNEL_TYPE ?= "kernel"
 
 uboot_prep_kimage() {
-       if [ -e arch/${ARCH}/boot/compressed/vmlinux ]; then
+       output_dir=$1
+       # For backward compatibility with kernel-fitimage.bbclass and kernel-uboot.bbclass
+       # support calling without parameter as well
+       if [ -z "$output_dir" ]; then
+               output_dir='.'
+       fi
+
+       linux_bin=$output_dir/linux.bin
+       if [ -e "arch/${ARCH}/boot/compressed/vmlinux" ]; then
                vmlinux_path="arch/${ARCH}/boot/compressed/vmlinux"
                linux_suffix=""
                linux_comp="none"
-       elif [ -e arch/${ARCH}/boot/vmlinuz.bin ]; then
-               rm -f linux.bin
-               cp -l arch/${ARCH}/boot/vmlinuz.bin linux.bin
+       elif [ -e "arch/${ARCH}/boot/vmlinuz.bin" ]; then
+               rm -f "$linux_bin"
+               cp -l "arch/${ARCH}/boot/vmlinuz.bin" "$linux_bin"
                vmlinux_path=""
                linux_suffix=""
                linux_comp="none"
        else
                vmlinux_path="vmlinux"
-               # Use vmlinux.initramfs for linux.bin when INITRAMFS_IMAGE_BUNDLE set
+               # Use vmlinux.initramfs for $linux_bin when INITRAMFS_IMAGE_BUNDLE set
                # As per the implementation in kernel.bbclass.
                # See do_bundle_initramfs function
                if [ "${INITRAMFS_IMAGE_BUNDLE}" = "1" ] && [ -e vmlinux.initramfs ]; then
@@ -34,18 +42,18 @@ uboot_prep_kimage() {
                linux_comp="${FIT_KERNEL_COMP_ALG}"
        fi
 
-       [ -n "${vmlinux_path}" ] && ${KERNEL_OBJCOPY} -O binary -R .note -R .comment -S "${vmlinux_path}" linux.bin
+       [ -n "$vmlinux_path" ] && ${KERNEL_OBJCOPY} -O binary -R .note -R .comment -S "$vmlinux_path" "$linux_bin"
 
-       if [ "${linux_comp}" != "none" ] ; then
-               if [ "${linux_comp}" = "gzip" ] ; then
-                       gzip -9 linux.bin
-               elif [ "${linux_comp}" = "lzo" ] ; then
-                       lzop -9 linux.bin
-               elif [ "${linux_comp}" = "lzma" ] ; then
-                       xz --format=lzma -f -6 linux.bin
+       if [ "$linux_comp" != "none" ] ; then
+               if [ "$linux_comp" = "gzip" ] ; then
+                       gzip -9 "$linux_bin"
+               elif [ "$linux_comp" = "lzo" ] ; then
+                       lzop -9 "$linux_bin"
+               elif [ "$linux_comp" = "lzma" ] ; then
+                       xz --format=lzma -f -6 "$linux_bin"
                fi
-               mv -f "linux.bin${linux_suffix}" linux.bin
+               mv -f "$linux_bin$linux_suffix" "$linux_bin"
        fi
 
-       echo "${linux_comp}"
-}
+       printf "$linux_comp" > "$output_dir/linux_comp"
+}
\ No newline at end of file
index 1a599e656c8b05f8a9235b691d90ad8822627f5c..e353232a0e9d3b07d2da76d68979acd43abb494d 100644 (file)
@@ -29,6 +29,7 @@ python __anonymous () {
 do_uboot_mkimage[dirs] += "${B}"
 do_uboot_mkimage() {
        uboot_prep_kimage
+       linux_comp="$(cat linux_comp)"
 
        ENTRYPOINT=${UBOOT_ENTRYPOINT}
        if [ -n "${UBOOT_ENTRYSYMBOL}" ]; then
@@ -36,6 +37,6 @@ do_uboot_mkimage() {
                        awk '$3=="${UBOOT_ENTRYSYMBOL}" {print "0x"$1;exit}'`
        fi
 
-       uboot-mkimage -A ${UBOOT_ARCH} -O linux -T ${UBOOT_MKIMAGE_KERNEL_TYPE} -C "${linux_comp}" -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin ${B}/arch/${ARCH}/boot/uImage
+       uboot-mkimage -A ${UBOOT_ARCH} -O linux -T ${UBOOT_MKIMAGE_KERNEL_TYPE} -C "$linux_comp" -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin ${B}/arch/${ARCH}/boot/uImage
        rm -f linux.bin
 }