diff --git a/meta-digi-arm/classes/image_types_digi.bbclass b/meta-digi-arm/classes/image_types_digi.bbclass index 65f0ee5e4..237524254 100644 --- a/meta-digi-arm/classes/image_types_digi.bbclass +++ b/meta-digi-arm/classes/image_types_digi.bbclass @@ -73,3 +73,52 @@ runimagecmd_jffs2() { runimagecmd_sum.jffs2 = "${runimagecmd_jffs2}" runimagecmd_ubifs = "${runimagecmd_jffs2}" + +runimagecmd_boot.vfat() { + # + # Image generation code for image type 'boot.vfat' + # + BOOTIMG_FILES="$(readlink -e ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE})" + BOOTIMG_FILES_SYMLINK="${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}" + if [ -n "${KERNEL_DEVICETREE}" ]; then + for DTB in ${KERNEL_DEVICETREE}; do + if [ -e "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTB}" ]; then + BOOTIMG_FILES="${BOOTIMG_FILES} $(readlink -e ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTB})" + BOOTIMG_FILES_SYMLINK="${BOOTIMG_FILES_SYMLINK} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTB}" + fi + done + fi + + # Size of kernel and device tree + 10% extra space (in bytes) + BOOTIMG_FILES_SIZE="$(expr $(du -bc ${BOOTIMG_FILES} | tail -n1 | cut -f1) \* \( 100 + 10 \) / 100)" + + # 1KB blocks for mkfs.vfat + BOOTIMG_BLOCKS="$(expr ${BOOTIMG_FILES_SIZE} / 1024)" + if [ -n "${BOARD_BOOTIMAGE_PARTITION_SIZE}" ]; then + BOOTIMG_BLOCKS="$(expr ${BOARD_BOOTIMAGE_PARTITION_SIZE} / 1024)" + fi + + # POKY: Ensure total sectors is a multiple of sectors per track or mcopy will + # complain. Blocks are 1024 bytes, sectors are 512 bytes, and we generate + # images with 32 sectors per track. This calculation is done in blocks, thus + # the use of 16 instead of 32. + BOOTIMG_BLOCKS="$(expr \( \( ${BOOTIMG_BLOCKS} + 15 \) / 16 \) \* 16)" + + # Build VFAT boot image in copy the contents + mkfs.vfat -n "Boot ${MACHINE}" -S 512 -C ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.vfat ${BOOTIMG_BLOCKS} + # Copy files into the FAT image (renaming DTB's on the fly) + for i in ${BOOTIMG_FILES_SYMLINK}; do + mcopy -i ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.vfat ${i} ::/$(basename ${i} | sed -e '/dtb$/s,^${KERNEL_IMAGETYPE}-,,g') + done + + # Truncate the image to speed up the downloading/writing to the EMMC + if [ -n "${BOARD_BOOTIMAGE_PARTITION_SIZE}" ]; then + # U-Boot writes 512 bytes sectors so truncate the image at a sector boundary + truncate -s $(expr \( \( ${BOOTIMG_FILES_SIZE} + 511 \) / 512 \) \* 512) ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.vfat + fi + + # Create the symlink + if [ -n "${IMAGE_LINK_NAME}" ] && [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.boot.vfat ]; then + ln -s ${IMAGE_NAME}.boot.vfat ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.boot.vfat + fi +} diff --git a/meta-digi-arm/conf/machine/ccimx6adpt.conf b/meta-digi-arm/conf/machine/ccimx6adpt.conf index ebb37dea7..9fcc88707 100644 --- a/meta-digi-arm/conf/machine/ccimx6adpt.conf +++ b/meta-digi-arm/conf/machine/ccimx6adpt.conf @@ -8,3 +8,11 @@ include conf/machine/include/ccimx6.inc KERNEL_DEVICETREE = "imx6-${MACHINE}.dtb imx6-${MACHINE}-ldo.dtb imx6-${MACHINE}-hdcp.dtb" SERIAL_CONSOLES = "115200;ttymxc0" + +# +# Partition sizes +# --------------- +# boot: 64 MiB +# system: 512 MiB +# +BOARD_BOOTIMAGE_PARTITION_SIZE ?= "67108864" diff --git a/meta-digi-arm/conf/machine/include/imx-digi-base.inc b/meta-digi-arm/conf/machine/include/imx-digi-base.inc index 6477bc43e..edbad677e 100644 --- a/meta-digi-arm/conf/machine/include/imx-digi-base.inc +++ b/meta-digi-arm/conf/machine/include/imx-digi-base.inc @@ -52,7 +52,7 @@ IMAGE_FSTYPES ?= "sum.jffs2 tar.bz2 ubifs" # MX6 does not have flash memory so build sdcard images SDCARD_ROOTFS_mx6 ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext4" -IMAGE_FSTYPES_mx6 ?= "ext4 sdcard tar.bz2" +IMAGE_FSTYPES_mx6 ?= "boot.vfat ext4 sdcard tar.bz2" KERNEL_IMAGETYPE = "uImage"