]> code.ossystems Code Review - meta-freescale.git/commitdiff
kernel-imximage.bbclass: Linux kernel with DCD headers
authorOtavio Salvador <otavio@ossystems.com.br>
Tue, 12 Sep 2017 14:20:40 +0000 (11:20 -0300)
committerOtavio Salvador <otavio@ossystems.com.br>
Wed, 27 Sep 2017 13:26:46 +0000 (10:26 -0300)
This new image type adds support to generate a Linux kernel with DCD
headers. Essentially it adds support to directly boot a Linux kernel
without a bootloader.

As the Linux kernel will be boot directly, it required that the Device
Tree is appended to the kernel image, which had support included in
OE-Core.

To have the Linux kernel generated with the DCD headers, following
steps must be followed:

 - Linux kernel recipe must inherit kernel-imximage class;
 - Device Tree appended Linux kernel must be used
   (KERNEL_DEVICETREE_BUNDLE = "1");
 - DCD header configuration must be provided (dcd.cfg or
   dcd-<devicetree>.cfg);

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
classes/kernel-imximage.bbclass [new file with mode: 0644]

diff --git a/classes/kernel-imximage.bbclass b/classes/kernel-imximage.bbclass
new file mode 100644 (file)
index 0000000..efc819f
--- /dev/null
@@ -0,0 +1,41 @@
+DEPENDS_append = ' u-boot-mkimage-native'
+
+IMXIMAGE_ENTRYPOINT ?= "${UBOOT_ENTRYPOINT}"
+
+imx_mkimage() {
+       uboot-mkimage -n $1 -T imximage -e ${IMXIMAGE_ENTRYPOINT} -d $2 $2.imx
+}
+
+gen_imximage() {
+       if [ -z "${IMXIMAGE_ENTRYPOINT}" ]; then
+               bbfatal "IMXIMAGE_ENTRYPOINT must have a valid value"
+       fi
+
+       for DTB in ${KERNEL_DEVICETREE}; do
+               DTB=`normalize_dtb "${DTB}"`
+               DTB_EXT=${DTB##*.}
+               DTB_BASE_NAME=`basename ${DTB} ."${DTB_EXT}"`
+               base_name="zImage-"${KERNEL_IMAGE_BASE_NAME}
+               symlink_name="zImage-"${KERNEL_IMAGE_SYMLINK_NAME}
+               DTB_NAME=`echo ${base_name} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
+               DTB_SYMLINK_NAME=`echo ${symlink_name} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
+               for DCD in dcd-${DTB}.cfg dcd.cfg; do
+                       if [ -e "${WORKDIR}/${DCD}" ]; then
+                               if [ -e ${DEPLOYDIR}/${DTB_NAME}.${DTB_EXT}.bin ]; then
+                                       imx_mkimage ${WORKDIR}/${DCD} ${DEPLOYDIR}/${DTB_NAME}.${DTB_EXT}.bin
+                                       ln -sf ${DTB_NAME}.${DTB_EXT}.bin.imx ${DEPLOYDIR}/$type-${DTB_BASE_NAME}.${DTB_EXT}.bin.imx
+                               fi
+
+                               if [ -e ${DEPLOYDIR}/zImage-${INITRAMFS_BASE_NAME}-${DTB_BASE_NAME}.${DTB_EXT}.bin ]; then
+                                       imx_mkimage ${WORKDIR}/${DCD} ${DEPLOYDIR}/zImage-${INITRAMFS_BASE_NAME}-${DTB_BASE_NAME}.${DTB_EXT}.bin
+                                       ln -sf zImage-${INITRAMFS_BASE_NAME}-${DTB_BASE_NAME}.${DTB_EXT}.bin.imx \
+                                          ${DEPLOYDIR}/zImage-initramfs-${DTB_BASE_NAME}.${DTB_EXT}-${MACHINE}.bin.imx
+                               fi
+                       fi
+               done
+       done
+}
+
+do_deploy_append() {
+       gen_imximage
+}