Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- inherit image_types
- # Set alignment to 4MB [in KiB] This is also the size reserved for the bootloader
- IMAGE_ROOTFS_ALIGNMENT = "4096"
- # BOOTLOADER in KiB
- UBOOT_SUFFIX ?= "bin"
- UBOOT_SUFFIX_SDCARD ?= "${UBOOT_SUFFIX}"
- BOOTLOADER_SPACE = "4096"
- BOOTLOADER_SOURCE="${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD}"
- BOOTDD_VOLUME_ID ?= "BOOT"
- # Boot partition size [in KiB] must be a multiple of IMAGE_ROOTFS_ALIGNMENT
- BOOT_SPACE ?= "8192"
- BOOT_SOURCE="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.proj-boot.vfat"
- #ROOTFS_SIZE is provided by yocto
- ROOTFS_SOURCE="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.proj-root.ext4"
- #size in KiB
- # 1Go for data
- DATA_SPACE="1048576"
- DATA_SOURCE="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.proj-data.ext4"
- # 1Go for settings
- SETTING_SPACE="1048576"
- SETTING_SOURCE="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.proj-setting.ext4"
- # total size of the target SDCARD [in KiB]
- # 5Go
- SDCARD_SIZE ="5242880"
- SDCARD = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.proj-usb"
- ####################################################
- # PROJ-ROOT #
- ####################################################
- IMAGE_TYPES += "proj-root.ext4"
- IMAGE_CMD_proj-root.ext4 = "make_proj_root"
- make_proj_root () {
- rm -rf ${WORKDIR}/tmp-setting/
- mkdir ${WORKDIR}/tmp-setting
- mv ${IMAGE_ROOTFS}/setting/* ${WORKDIR}/tmp-setting
- dd if=/dev/zero of=${ROOTFS_SOURCE} seek=${ROOTFS_SIZE} count=0 bs=1024
- mkfs.ext4 -F ${ROOTFS_SOURCE} -d ${IMAGE_ROOTFS}
- mv ${WORKDIR}/tmp-setting/* ${IMAGE_ROOTFS}/setting/
- rm -rf ${WORKDIR}/tmp-setting/
- }
- ####################################################
- # PROJ-SETTING #
- ####################################################
- IMAGE_TYPES += "proj-setting.ext4"
- IMAGE_CMD_proj-setting.ext4 = "make_proj_setting"
- make_proj_setting () {
- dd if=/dev/zero of=${SETTING_SOURCE} seek=${SETTING_SPACE} count=0 bs=1024
- mkfs.ext4 -F ${SETTING_SOURCE} -d ${IMAGE_ROOTFS}/setting
- }
- #The following line is purely for synchronisation purpose.
- IMAGE_TYPEDEP_proj-setting.ext4 += "proj-root.ext4"
- ####################################################
- # PROJ-DATA #
- ####################################################
- IMAGE_TYPES += "proj-data.ext4"
- IMAGE_CMD_proj-data.ext4 = "make_proj_data"
- make_proj_data () {
- dd if=/dev/zero of=${DATA_SOURCE} seek=${DATA_SPACE} count=0 bs=1024
- mkfs.ext4 -F ${DATA_SOURCE} ${DATA_SPACE}
- }
- ####################################################
- # PROJ-BOOT #
- ####################################################
- IMAGE_TYPES += "proj-boot.vfat"
- IMAGE_CMD_proj-boot.vfat = "make_proj_boot"
- make_proj_boot () {
- BOOT_IMAGE_NAME=${BOOT_SOURCE}
- mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -F 32 -C $BOOT_IMAGE_NAME $(expr ${BOOT_SPACE} \* 2 )
- mcopy -i $BOOT_IMAGE_NAME -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin ::/${KERNEL_IMAGETYPE}
- mcopy -i $BOOT_IMAGE_NAME -s ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.imx ::/u-boot.imx
- # 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 $BOOT_IMAGE_NAME -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 $BOOT_IMAGE_NAME -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
- }
- ####################################################
- # PROJ-USB #
- ####################################################
- IMAGE_TYPES += "proj-usb"
- IMAGE_DEPENDS_proj-usb = "parted-native:do_populate_sysroot \
- dosfstools-native:do_populate_sysroot \
- mtools-native:do_populate_sysroot \
- virtual/kernel:do_deploy \
- u-boot:do_deploy"
- IMAGE_TYPEDEP_proj-usb += "proj-root.ext4 \
- proj-boot.vfat \
- proj-data.ext4 \
- proj-setting.ext4 \
- "
- IMAGE_CMD_proj-usb () {
- # Initialize a sparse file
- dd if=/dev/zero of=${SDCARD} bs=1024 count=0 seek=${SDCARD_SIZE}
- # where are we writing right now in KiB
- WRITE_MARK=0
- # create the partition table
- parted -s ${SDCARD} mklabel msdos
- # Add the bootloader just after the partition table (1024 bytes after the start, i.e 2xbloc_size)
- dd if=${BOOTLOADER_SOURCE} of=${SDCARD} conv=notrunc seek=1 bs=1024
- # move the write mark to BOOTLOADER_SPACE and align to IMAGE_ROOTFS_ALIGNMENT
- WRITE_MARK=$(expr ${BOOTLOADER_SPACE})
- # Add the boot partition aligned to the correct alignment, skiping th bootloader
- BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1)
- BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
- bbnote "BOOT_SPACE_ALIGNED=${BOOT_SPACE_ALIGNED}"
- parted -s ${SDCARD} unit KiB mkpart primary fat32 ${WRITE_MARK} $(expr ${WRITE_MARK} \+ ${BOOT_SPACE_ALIGNED})
- dd if=${BOOT_SOURCE} of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${WRITE_MARK} \* 1024)
- WRITE_MARK=$(expr ${WRITE_MARK} + $BOOT_SPACE_ALIGNED)
- bbnote "WRITE_MARK=$WRITE_MARK"
- BS=$(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT})
- # Add the root partition
- ROOTFS_SIZE_ALIGNED=$(expr ${ROOTFS_SIZE} \+ ${IMAGE_ROOTFS_ALIGNMENT} \- 1)
- ROOTFS_SIZE_ALIGNED=$(expr ${ROOTFS_SIZE_ALIGNED} - ${ROOTFS_SIZE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
- bbnote "ROOTFS_SIZE=${ROOTFS_SIZE}"
- bbnote "ROOTFS_SIZE_ALIGNED=$ROOTFS_SIZE_ALIGNED"
- parted -s ${SDCARD} unit KiB mkpart primary $(expr ${WRITE_MARK}) $(expr ${WRITE_MARK} \+ $ROOTFS_SIZE_ALIGNED)
- dd if=${ROOTFS_SOURCE} of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${WRITE_MARK} \* 1024)
- WRITE_MARK=$(expr ${WRITE_MARK} + $ROOTFS_SIZE_ALIGNED)
- bbnote "WRITE_MARK=$WRITE_MARK"
- # Add the data partition
- DATA_SPACE_ALIGNED=$(expr ${DATA_SPACE} \+ ${IMAGE_ROOTFS_ALIGNMENT} \- 1)
- DATA_SPACE_ALIGNED=$(expr ${DATA_SPACE_ALIGNED} - ${DATA_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
- bbnote "DATA_SPACE_ALIGNED=$DATA_SPACE_ALIGNED"
- parted -s ${SDCARD} unit KiB mkpart primary ${WRITE_MARK} $(expr ${WRITE_MARK} \+ ${DATA_SPACE_ALIGNED})
- dd if=${DATA_SOURCE} of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${WRITE_MARK} \* 1024)
- WRITE_MARK=$(expr ${WRITE_MARK} + $DATA_SPACE_ALIGNED)
- bbnote "WRITE_MARK=$WRITE_MARK"
- # Add the setting partition
- SETTING_SPACE_ALIGNED=$(expr ${SETTING_SPACE} \+ ${IMAGE_ROOTFS_ALIGNMENT} \- 1)
- SETTING_SPACE_ALIGNED=$(expr ${SETTING_SPACE_ALIGNED} - ${SETTING_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
- bbnote "SETTING_SPACE_ALIGNED=$SETTING_SPACE_ALIGNED"
- parted -s ${SDCARD} unit KiB mkpart primary ${WRITE_MARK} $(expr ${WRITE_MARK} \+ ${SETTING_SPACE_ALIGNED})
- parted ${SDCARD} print
- dd if=${SETTING_SOURCE} of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${WRITE_MARK} \* 1024)
- WRITE_MARK=$(expr ${WRITE_MARK} + $SETTING_SPACE_ALIGNED)
- bbnote "WRITE_MARK=$WRITE_MARK"
- parted ${SDCARD} print
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement