[gnome-continuous-yocto/gnomeostree-3.28-rocko: 7876/8267] kernel-devicetree.bbclass: Add support to generate append to kernel



commit 64c4d72b3a64c938c36b373b2049b5d9f01e6749
Author: Otavio Salvador <otavio ossystems com br>
Date:   Thu Sep 21 10:58:33 2017 -0300

    kernel-devicetree.bbclass: Add support to generate append to kernel
    
    The are use cases where the Device Tree appended to the kernel is
    convinient, so we generate the bundle concatenating the kernel (and
    potentionally the initramfs) and the Device Tree binaries.
    
    To enable it, set KERNEL_DEVICETREE_BUNDLE variable to '1'
    
    (From OE-Core rev: f044567326988e84e5d72040e9387c3240836ddb)
    
    Signed-off-by: Otavio Salvador <otavio ossystems com br>
    Signed-off-by: Ross Burton <ross burton intel com>
    Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>

 meta/classes/kernel-devicetree.bbclass |   52 +++++++++++++++++++++++++++++++-
 1 files changed, 51 insertions(+), 1 deletions(-)
---
diff --git a/meta/classes/kernel-devicetree.bbclass b/meta/classes/kernel-devicetree.bbclass
index 72814ca..6e08be4 100644
--- a/meta/classes/kernel-devicetree.bbclass
+++ b/meta/classes/kernel-devicetree.bbclass
@@ -1,6 +1,13 @@
 # Support for device tree generation
-PACKAGES_append = " kernel-devicetree"
+PACKAGES_append = " \
+    kernel-devicetree \
+    ${@['kernel-image-zimage-bundle', ''][d.getVar('KERNEL_DEVICETREE_BUNDLE') != '1']} \
+"
 FILES_kernel-devicetree = "/${KERNEL_IMAGEDEST}/*.dtb /${KERNEL_IMAGEDEST}/*.dtbo"
+FILES_kernel-image-zimage-bundle = "/${KERNEL_IMAGEDEST}/zImage-*.dtb.bin"
+
+# Generate kernel+devicetree bundle
+KERNEL_DEVICETREE_BUNDLE ?= "0"
 
 normalize_dtb () {
        DTB="$1"
@@ -20,6 +27,28 @@ get_real_dtb_path_in_kernel () {
        echo "${DTB_PATH}"
 }
 
+do_configure_append() {
+       if [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then
+               if echo ${KERNEL_IMAGETYPE_FOR_MAKE} | grep -q 'zImage'; then
+                       case "${ARCH}" in
+                               "arm")
+                               config="${B}/.config"
+                               if ! grep -q 'CONFIG_ARM_APPENDED_DTB=y' $config; then
+                                       bbwarn 'CONFIG_ARM_APPENDED_DTB is NOT enabled in the kernel. 
Enabling it to allow the kernel to boot with the Device Tree appended!'
+                                       sed -i "/CONFIG_ARM_APPENDED_DTB[ =]/d" $config
+                                       echo "CONFIG_ARM_APPENDED_DTB=y" >> $config
+                                       echo "# CONFIG_ARM_ATAG_DTB_COMPAT is not set" >> $config
+                               fi
+                               ;;
+                               *)
+                               bberror "KERNEL_DEVICETREE_BUNDLE is not supported for ${ARCH}. Currently it 
is only supported for 'ARM'."
+                       esac
+               else
+                       bberror 'The KERNEL_DEVICETREE_BUNDLE requires the KERNEL_IMAGETYPE to contain 
zImage.'
+               fi
+       fi
+}
+
 do_compile_append() {
        for DTB in ${KERNEL_DEVICETREE}; do
                DTB=`normalize_dtb "${DTB}"`
@@ -38,6 +67,12 @@ do_install_append() {
                        symlink_name=${type}"-"${KERNEL_IMAGE_SYMLINK_NAME}
                        DTB_SYMLINK_NAME=`echo ${symlink_name} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
                        ln -sf ${DTB_BASE_NAME}.${DTB_EXT} 
${D}/${KERNEL_IMAGEDEST}/devicetree-${DTB_SYMLINK_NAME}.${DTB_EXT}
+
+                       if [ "$type" = "zImage" ] && [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then
+                               cat ${D}/${KERNEL_IMAGEDEST}/$type \
+                                       ${D}/${KERNEL_IMAGEDEST}/${DTB_BASE_NAME}.${DTB_EXT} \
+                                       > ${D}/${KERNEL_IMAGEDEST}/$type-${DTB_BASE_NAME}.${DTB_EXT}.bin
+                       fi
                done
        done
 }
@@ -57,6 +92,21 @@ do_deploy_append() {
                        install -m 0644 ${DTB_PATH} ${DEPLOYDIR}/${DTB_NAME}.${DTB_EXT}
                        ln -sf ${DTB_NAME}.${DTB_EXT} ${DEPLOYDIR}/${DTB_SYMLINK_NAME}.${DTB_EXT}
                        ln -sf ${DTB_NAME}.${DTB_EXT} ${DEPLOYDIR}/${DTB_BASE_NAME}.${DTB_EXT}
+
+                       if [ "$type" = "zImage" ] && [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then
+                               cat ${DEPLOYDIR}/$type \
+                                       ${DEPLOYDIR}/${DTB_NAME}.${DTB_EXT} \
+                                       > ${DEPLOYDIR}/${DTB_NAME}.${DTB_EXT}.bin
+                               ln -sf ${DTB_NAME}.${DTB_EXT}.bin 
${DEPLOYDIR}/$type-${DTB_BASE_NAME}.${DTB_EXT}.bin
+
+                               if [ -e "${KERNEL_OUTPUT_DIR}/${type}.initramfs" ]; then
+                                       cat ${KERNEL_OUTPUT_DIR}/${type}.initramfs \
+                                               ${DEPLOYDIR}/${DTB_NAME}.${DTB_EXT} \
+                                               > 
${DEPLOYDIR}/${type}-${INITRAMFS_BASE_NAME}-${DTB_BASE_NAME}.${DTB_EXT}.bin
+                                       ln -sf ${type}-${INITRAMFS_BASE_NAME}-${DTB_BASE_NAME}.${DTB_EXT}.bin 
\
+                                              
${DEPLOYDIR}/${type}-initramfs-${DTB_BASE_NAME}.${DTB_EXT}-${MACHINE}.bin
+                               fi
+                       fi
                done
        done
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]