]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core.git/commitdiff
kernel-fitimage: Fix the default dtb config check
authorArslan Ahmad <arslan_ahmad@mentor.com>
Tue, 11 Apr 2023 11:25:09 +0000 (16:25 +0500)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 13 Apr 2023 10:55:41 +0000 (11:55 +0100)
The current check for default dtb image checks if the file exists and is
not empty but appends a slash to the path due to which the file is never
found. It also doesn't replace slash in filename with _ as done when
populating the DTB variable. A better way to check the existence of the
device tree would be from the list of DTBs since this is used during
compilation.

Signed-off-by: Arslan Ahmad <arslan_ahmad@mentor.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
meta/classes-recipe/kernel-fitimage.bbclass

index b77747404f5be797964dca3b20e1ac988ff6580b..6684478c33c3677dd66ba95296cf52e76d02b706 100644 (file)
@@ -388,6 +388,7 @@ symlink_points_below() {
 # $5 ... u-boot script ID
 # $6 ... config ID
 # $7 ... default flag
+# $8 ... default DTB image name
 fitimage_emit_section_config() {
 
        conf_csum="${FIT_HASH_ALG}"
@@ -404,6 +405,7 @@ fitimage_emit_section_config() {
        bootscr_id="$5"
        config_id="$6"
        default_flag="$7"
+       default_dtb_image="$8"
 
        # Test if we have any DTBs at all
        sep=""
@@ -415,7 +417,6 @@ fitimage_emit_section_config() {
        bootscr_line=""
        setup_line=""
        default_line=""
-       default_dtb_image="${FIT_CONF_DEFAULT_DTB}"
 
        dtb_image_sect=$(symlink_points_below $dtb_image "${EXTERNAL_KERNEL_DEVICETREE}")
        if [ -z "$dtb_image_sect" ]; then
@@ -469,11 +470,7 @@ fitimage_emit_section_config() {
                        # Select default node as user specified dtb when
                        # multiple dtb exists.
                        if [ -n "$default_dtb_image" ]; then
-                               if [ -s "${EXTERNAL_KERNEL_DEVICETREE}/$default_dtb_image" ]; then
-                                       default_line="default = \"${FIT_CONF_PREFIX}$default_dtb_image\";"
-                               else
-                                       bbwarn "Couldn't find a valid user specified dtb in ${EXTERNAL_KERNEL_DEVICETREE}/$default_dtb_image"
-                               fi
+                               default_line="default = \"${FIT_CONF_PREFIX}$default_dtb_image\";"
                        else
                                default_line="default = \"${FIT_CONF_PREFIX}$dtb_image\";"
                        fi
@@ -555,7 +552,8 @@ fitimage_assemble() {
        ramdiskcount=$3
        setupcount=""
        bootscr_id=""
-       rm -f $1 ${KERNEL_OUTPUT_DIR}/$2
+       default_dtb_image=""
+       rm -f $1 arch/${ARCH}/boot/$2
 
        if [ -n "${UBOOT_SIGN_IMG_KEYNAME}" -a "${UBOOT_SIGN_KEYNAME}" = "${UBOOT_SIGN_IMG_KEYNAME}" ]; then
                bbfatal "Keys used to sign images and configuration nodes must be different."
@@ -593,6 +591,13 @@ fitimage_assemble() {
                                DTB_PATH="${KERNEL_OUTPUT_DIR}/$DTB"
                        fi
 
+                       # Set the default dtb image if it exists in the devicetree.
+                       if [ ${FIT_CONF_DEFAULT_DTB} = $DTB ];then
+                               default_dtb_image=$(echo "$DTB" | tr '/' '_')
+                       fi
+
+                       DTB=$(echo "$DTB" | tr '/' '_')
+
                        # Skip DTB if we've picked it up previously
                        echo "$DTBS" | tr ' ' '\n' | grep -xq "$DTB" && continue
 
@@ -606,6 +611,13 @@ fitimage_assemble() {
                dtbcount=1
                for DTB in $(find "${EXTERNAL_KERNEL_DEVICETREE}" -name '*.dtb' -printf '%P\n' | sort) \
                $(find "${EXTERNAL_KERNEL_DEVICETREE}" -name '*.dtbo' -printf '%P\n' | sort); do
+                       # Set the default dtb image if it exists in the devicetree.
+                       if [ ${FIT_CONF_DEFAULT_DTB} = $DTB ];then
+                               default_dtb_image=$(echo "$DTB" | tr '/' '_')
+                       fi
+
+                       DTB=$(echo "$DTB" | tr '/' '_')
+
                        # Skip DTB/DTBO if we've picked it up previously
                        echo "$DTBS" | tr ' ' '\n' | grep -xq "$DTB" && continue
 
@@ -619,6 +631,10 @@ fitimage_assemble() {
                done
        fi
 
+       if [ -n "${FIT_CONF_DEFAULT_DTB}" ] && [ -z $default_dtb_image ]; then 
+               bbwarn "${FIT_CONF_DEFAULT_DTB} is not available in the list of device trees."
+       fi
+
        #
        # Step 3: Prepare a u-boot script section
        #
@@ -691,15 +707,15 @@ fitimage_assemble() {
                for DTB in ${DTBS}; do
                        dtb_ext=${DTB##*.}
                        if [ "$dtb_ext" = "dtbo" ]; then
-                               fitimage_emit_section_config $1 "" "$DTB" "" "$bootscr_id" "" "`expr $i = $dtbcount`"
+                               fitimage_emit_section_config $1 "" "$DTB" "" "$bootscr_id" "" "`expr $i = $dtbcount`" "$default_dtb_image"
                        else
-                               fitimage_emit_section_config $1 $kernelcount "$DTB" "$ramdiskcount" "$bootscr_id" "$setupcount" "`expr $i = $dtbcount`"
+                               fitimage_emit_section_config $1 $kernelcount "$DTB" "$ramdiskcount" "$bootscr_id" "$setupcount" "`expr $i = $dtbcount`" "$default_dtb_image"
                        fi
                        i=`expr $i + 1`
                done
        else
                defaultconfigcount=1
-               fitimage_emit_section_config $1 $kernelcount "" "$ramdiskcount" "$bootscr_id"  "$setupcount" $defaultconfigcount
+               fitimage_emit_section_config $1 $kernelcount "" "$ramdiskcount" "$bootscr_id"  "$setupcount" $defaultconfigcount "$default_dtb_image"
        fi
 
        fitimage_emit_section_maint $1 sectend