[yocto] Using kernel fitimage with initramfs

Manjukumar Harthikote Matha MANJUKUM at xilinx.com
Thu Oct 12 14:46:20 PDT 2017


Hi All,

Had a question about kernel-fitimage.bbclass. I am enabling the fitimage using KERNEL_CLASSES += "kernel-fitimage" and KERNEL_IMAGETYPE = "fitImage".
It works and I see fitimage in my deploy directory without any issues.

However when I enable initramfs along with fitimage, using INITRAMFS_IMAGE = "core-image-minimal" and  INITRAMFS_IMAGE_BUNDLE = "1", kernel build fails.
It's mostly from kernel.bbclass because it tries to deploy fitimage https://github.com/openembedded/openembedded-core/blob/master/meta/classes/kernel.bbclass#L639
Am I using this featurecorrectly? anyone else facing same issue?

Below is a initial patch which I did to get me across the error, but I am not sure if this is the correct answer.

diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 756707a..d5342b4 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -208,14 +208,16 @@ do_bundle_initramfs () {
                # Backing up kernel image relies on its type(regular file or symbolic link)
                tmp_path=""
                for type in ${KERNEL_IMAGETYPES} ; do
-                       if [ -h ${KERNEL_OUTPUT_DIR}/$type ] ; then
-                               linkpath=`readlink -n ${KERNEL_OUTPUT_DIR}/$type`
-                               realpath=`readlink -fn ${KERNEL_OUTPUT_DIR}/$type`
-                               mv -f $realpath $realpath.bak
-                               tmp_path=$tmp_path" "$type"#"$linkpath"#"$realpath
-                       elif [ -f ${KERNEL_OUTPUT_DIR}/$type ]; then
-                               mv -f ${KERNEL_OUTPUT_DIR}/$type ${KERNEL_OUTPUT_DIR}/$type.bak
-                               tmp_path=$tmp_path" "$type"##"
+                       if [ "$type" != "fitImage" ]; then
+                               if [ -h ${KERNEL_OUTPUT_DIR}/$type ] ; then
+                                       linkpath=`readlink -n ${KERNEL_OUTPUT_DIR}/$type`
+                                       realpath=`readlink -fn ${KERNEL_OUTPUT_DIR}/$type`
+                                       mv -f $realpath $realpath.bak
+                                       tmp_path=$tmp_path" "$type"#"$linkpath"#"$realpath
+                               elif [ -f ${KERNEL_OUTPUT_DIR}/$type ]; then
+                                       mv -f ${KERNEL_OUTPUT_DIR}/$type ${KERNEL_OUTPUT_DIR}/$type.bak
+                                       tmp_path=$tmp_path" "$type"##"
+                               fi
                        fi
                done
                use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio
@@ -627,8 +629,10 @@ MODULE_TARBALL_DEPLOY ?= "1"

 kernel_do_deploy() {
        for type in ${KERNEL_IMAGETYPES} ; do
-               base_name=${type}-${KERNEL_IMAGE_BASE_NAME}
-               install -m 0644 ${KERNEL_OUTPUT_DIR}/${type} ${DEPLOYDIR}/${base_name}.bin
+               if [ "$type" != "fitImage" ]; then
+                       base_name=${type}-${KERNEL_IMAGE_BASE_NAME}
+                       install -m 0644 ${KERNEL_OUTPUT_DIR}/${type} ${DEPLOYDIR}/${base_name}.bin
+               fi
        done
        if [ ${MODULE_TARBALL_DEPLOY} = "1" ] && (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
                mkdir -p ${D}/lib
@@ -637,21 +641,25 @@ kernel_do_deploy() {
        fi

        for type in ${KERNEL_IMAGETYPES} ; do
-               base_name=${type}-${KERNEL_IMAGE_BASE_NAME}
-               symlink_name=${type}-${KERNEL_IMAGE_SYMLINK_NAME}
-               ln -sf ${base_name}.bin ${DEPLOYDIR}/${symlink_name}.bin
-               ln -sf ${base_name}.bin ${DEPLOYDIR}/${type}
+               if [ "$type" != "fitImage" ]; then
+                       base_name=${type}-${KERNEL_IMAGE_BASE_NAME}
+                       symlink_name=${type}-${KERNEL_IMAGE_SYMLINK_NAME}
+                       ln -sf ${base_name}.bin ${DEPLOYDIR}/${symlink_name}.bin
+                       ln -sf ${base_name}.bin ${DEPLOYDIR}/${type}
+               fi
        done

        cd ${B}
        # Update deploy directory
        for type in ${KERNEL_IMAGETYPES} ; do
-               if [ -e "${KERNEL_OUTPUT_DIR}/${type}.initramfs" ]; then
-                       echo "Copying deploy ${type} kernel-initramfs image and setting up links..."
-                       initramfs_base_name=${type}-${INITRAMFS_BASE_NAME}
-                       initramfs_symlink_name=${type}-initramfs-${MACHINE}
-                       install -m 0644 ${KERNEL_OUTPUT_DIR}/${type}.initramfs ${DEPLOYDIR}/${initramfs_base_name}.bin
-                       ln -sf ${initramfs_base_name}.bin ${DEPLOYDIR}/${initramfs_symlink_name}.bin
+               if [ "$type" != "fitImage" ]; then
+                       if [ -e "${KERNEL_OUTPUT_DIR}/${type}.initramfs" ]; then
+                               echo "Copying deploy ${type} kernel-initramfs image and setting up links..."
+                               initramfs_base_name=${type}-${INITRAMFS_BASE_NAME}
+                               initramfs_symlink_name=${type}-initramfs-${MACHINE}
+                               install -m 0644 ${KERNEL_OUTPUT_DIR}/${type}.initramfs ${DEPLOYDIR}/${initramfs_base_name}.bin
+                               ln -sf ${initramfs_base_name}.bin ${DEPLOYDIR}/${initramfs_symlink_name}.bin
+                       fi
                fi
        done
 }

Thanks,
Manju



More information about the yocto mailing list