inherit image_types SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3" # Boot partition size [in KiB] IMAGE_ROOTFS_ALIGNMENT_cyclone5 ?= "2048" IMAGE_ROOTFS_ALIGNMENT_arria5 ?= "2048" BOOT_SPACE ?= "102400" IMAGE_DEPENDS_sdcard = "parted-native:do_populate_sysroot \ dosfstools-native:do_populate_sysroot \ mtools-native:do_populate_sysroot \ virtual/kernel:do_deploy \ virtual/bootloader:do_deploy" SDCARD_GENERATION_COMMAND_cyclone5 = "generate_28nm_sdcard" SDCARD_GENERATION_COMMAND_arria5 = "generate_28nm_sdcard" # # Generate the boot image with the boot scripts and required Device Tree # files _generate_boot_image() { local boot_part=$1 # Create boot partition image BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \ | awk "/ $boot_part / { print substr(\$4, 1, length(\$4 -1)) / 1024 }") # mkdosfs will sometimes use FAT16 when it is not appropriate, # resulting in a boot failure from SYSLINUX. Use FAT32 for # images larger than 512MB, otherwise let mkdosfs decide. if [ $(expr $BOOT_BLOCKS / 1024) -gt 512 ]; then FATSIZE="-F 32" fi rm -f ${WORKDIR}/boot.img mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 ${FATSIZE} -C ${WORKDIR}/boot.img $BOOT_BLOCKS mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin ::/${KERNEL_IMAGETYPE} # Copy boot scripts for item in ${BOOT_SCRIPTS}; do src=`echo $item | awk -F':' '{ print $1 }'` dst=`echo $item | awk -F':' '{ print $2 }'` mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/$src ::/$dst done # Copy device tree file if test -n "${KERNEL_DEVICETREE}"; then for DTS_FILE in ${KERNEL_DEVICETREE}; do DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'` if [ -e "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb" ]; then kernel_bin="`readlink ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin`" kernel_bin_for_dtb="`readlink ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb | sed "s,$DTS_BASE_NAME,${MACHINE},g;s,\.dtb$,.bin,g"`" if [ $kernel_bin = $kernel_bin_for_dtb ]; then mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb ::/${DTS_BASE_NAME}.dtb fi else bbfatal "${DTS_FILE} does not exist." fi done fi } generate_28nm_sdcard () { # Create partition table parted -s ${SDCARD} mklabel msdos parted -s ${SDCARD} unit KiB mkpart primary fat32 ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE) parted -s ${SDCARD} unit KiB mkpart primary 1024 2048 #set part 3 to type a2 for spl / uboot image echo -ne "\xa2" | dd of=${SDCARD} bs=1 count=1 seek=482 conv=notrunc if [ -e "${DEPLOY_DIR_IMAGE}/${SPL_BINARY}-${UBOOT_CONFIG}" ] then dd if=${DEPLOY_DIR_IMAGE}/${SPL_BINARY}-${UBOOT_CONFIG} of=${SDCARD} conv=notrunc seek=1 bs=$(expr 1024 \* 1024) elif [ -e "${DEPLOY_DIR_IMAGE}/${SPL_BINARY}-${UBOOT_CONFIG}" ] then dd if=${DEPLOY_DIR_IMAGE}/${SPL_BINARY} of=${SDCARD} conv=notrunc seek=1 bs=$(expr 1024 \* 1024) else bbfatal "${SPL_BINARY} does not exist." fi parted ${SDCARD} print _generate_boot_image 1 # Burn Partition dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${IMAGE_ROOTFS_ALIGNMENT} \* 1024) dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${BOOT_SPACE_ALIGNED} \* 1024 + ${IMAGE_ROOTFS_ALIGNMENT} \* 1024) } IMAGE_CMD_sdcard () { if [ -z "${SDCARD_ROOTFS}" ]; then bberror "SDCARD_ROOTFS is undefined. To use sdcard image from Freescale's BSP it needs to be defined." exit 1 fi # Align boot partition and calculate total SD card image size BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1) BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT}) SDCARD_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + $ROOTFS_SIZE + ${IMAGE_ROOTFS_ALIGNMENT}) # Initialize a sparse file if [ "x${UBOOT_CONFIG}" != "x" ] then SDCARD_NAME="${IMAGE_NAME}-${UBOOT_CONFIG}.rootfs.sdcard" else SDCARD_NAME="${IMAGE_NAME}.rootfs.sdcard" fi SDCARD="${DEPLOY_DIR_IMAGE}/${SDCARD_NAME}" dd if=/dev/zero of=${SDCARD} bs=1 count=0 seek=$(expr 1024 \* ${SDCARD_SIZE}) rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.sdcard ln -s ${SDCARD_NAME} ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.sdcard ${SDCARD_GENERATION_COMMAND} } # The sdcard requires the rootfs filesystem to be built before using # it so we must make this dependency explicit. IMAGE_TYPEDEP_sdcard = "${@d.getVar('SDCARD_ROOTFS', 1).split('.')[-1]}"