Advertisement
Guest User

Untitled

a guest
Jul 6th, 2016
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.92 KB | None | 0 0
  1. inherit image_types
  2.  
  3.  
  4. # Set alignment to 4MB [in KiB] This is also the size reserved for the bootloader
  5. IMAGE_ROOTFS_ALIGNMENT = "4096"
  6.  
  7.  
  8. # BOOTLOADER in KiB
  9. UBOOT_SUFFIX ?= "bin"
  10. UBOOT_SUFFIX_SDCARD ?= "${UBOOT_SUFFIX}"
  11. BOOTLOADER_SPACE = "4096"
  12. BOOTLOADER_SOURCE="${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD}"
  13.  
  14. BOOTDD_VOLUME_ID ?= "BOOT"
  15. # Boot partition size [in KiB] must be a multiple of IMAGE_ROOTFS_ALIGNMENT
  16. BOOT_SPACE ?= "8192"
  17. BOOT_SOURCE="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.proj-boot.vfat"
  18.  
  19.  
  20. #ROOTFS_SIZE is provided by yocto
  21. ROOTFS_SOURCE="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.proj-root.ext4"
  22.  
  23. #size in KiB
  24. # 1Go for data
  25. DATA_SPACE="1048576"
  26. DATA_SOURCE="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.proj-data.ext4"
  27.  
  28. # 1Go for settings
  29. SETTING_SPACE="1048576"
  30. SETTING_SOURCE="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.proj-setting.ext4"
  31.  
  32.  
  33. # total size of the target SDCARD [in KiB]
  34. # 5Go
  35. SDCARD_SIZE ="5242880"
  36. SDCARD = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.proj-usb"
  37.  
  38.  
  39. ####################################################
  40. # PROJ-ROOT #
  41. ####################################################
  42. IMAGE_TYPES += "proj-root.ext4"
  43. IMAGE_CMD_proj-root.ext4 = "make_proj_root"
  44. make_proj_root () {
  45. rm -rf ${WORKDIR}/tmp-setting/
  46. mkdir ${WORKDIR}/tmp-setting
  47. mv ${IMAGE_ROOTFS}/setting/* ${WORKDIR}/tmp-setting
  48.  
  49. dd if=/dev/zero of=${ROOTFS_SOURCE} seek=${ROOTFS_SIZE} count=0 bs=1024
  50. mkfs.ext4 -F ${ROOTFS_SOURCE} -d ${IMAGE_ROOTFS}
  51.  
  52. mv ${WORKDIR}/tmp-setting/* ${IMAGE_ROOTFS}/setting/
  53. rm -rf ${WORKDIR}/tmp-setting/
  54. }
  55.  
  56.  
  57.  
  58.  
  59.  
  60. ####################################################
  61. # PROJ-SETTING #
  62. ####################################################
  63. IMAGE_TYPES += "proj-setting.ext4"
  64. IMAGE_CMD_proj-setting.ext4 = "make_proj_setting"
  65. make_proj_setting () {
  66. dd if=/dev/zero of=${SETTING_SOURCE} seek=${SETTING_SPACE} count=0 bs=1024
  67. mkfs.ext4 -F ${SETTING_SOURCE} -d ${IMAGE_ROOTFS}/setting
  68. }
  69. #The following line is purely for synchronisation purpose.
  70. IMAGE_TYPEDEP_proj-setting.ext4 += "proj-root.ext4"
  71.  
  72.  
  73.  
  74. ####################################################
  75. # PROJ-DATA #
  76. ####################################################
  77. IMAGE_TYPES += "proj-data.ext4"
  78. IMAGE_CMD_proj-data.ext4 = "make_proj_data"
  79. make_proj_data () {
  80. dd if=/dev/zero of=${DATA_SOURCE} seek=${DATA_SPACE} count=0 bs=1024
  81. mkfs.ext4 -F ${DATA_SOURCE} ${DATA_SPACE}
  82. }
  83.  
  84.  
  85.  
  86. ####################################################
  87. # PROJ-BOOT #
  88. ####################################################
  89. IMAGE_TYPES += "proj-boot.vfat"
  90. IMAGE_CMD_proj-boot.vfat = "make_proj_boot"
  91. make_proj_boot () {
  92. BOOT_IMAGE_NAME=${BOOT_SOURCE}
  93.  
  94. mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -F 32 -C $BOOT_IMAGE_NAME $(expr ${BOOT_SPACE} \* 2 )
  95.  
  96. mcopy -i $BOOT_IMAGE_NAME -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin ::/${KERNEL_IMAGETYPE}
  97. mcopy -i $BOOT_IMAGE_NAME -s ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.imx ::/u-boot.imx
  98.  
  99. # Copy boot scripts
  100. for item in ${BOOT_SCRIPTS}; do
  101. src=`echo $item | awk -F':' '{ print $1 }'`
  102. dst=`echo $item | awk -F':' '{ print $2 }'`
  103.  
  104. mcopy -i $BOOT_IMAGE_NAME -s ${DEPLOY_DIR_IMAGE}/$src ::/$dst
  105. done
  106.  
  107. # Copy device tree file
  108. if test -n "${KERNEL_DEVICETREE}"; then
  109. for DTS_FILE in ${KERNEL_DEVICETREE}; do
  110. DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
  111. if [ -e "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb" ]; then
  112. kernel_bin="`readlink ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin`"
  113. 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"`"
  114. if [ $kernel_bin = $kernel_bin_for_dtb ]; then
  115. mcopy -i $BOOT_IMAGE_NAME -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTS_BASE_NAME}.dtb ::/${DTS_BASE_NAME}.dtb
  116. fi
  117. else
  118. bbfatal "${DTS_FILE} does not exist."
  119. fi
  120. done
  121. fi
  122. }
  123.  
  124. ####################################################
  125. # PROJ-USB #
  126. ####################################################
  127. IMAGE_TYPES += "proj-usb"
  128. IMAGE_DEPENDS_proj-usb = "parted-native:do_populate_sysroot \
  129. dosfstools-native:do_populate_sysroot \
  130. mtools-native:do_populate_sysroot \
  131. virtual/kernel:do_deploy \
  132. u-boot:do_deploy"
  133. IMAGE_TYPEDEP_proj-usb += "proj-root.ext4 \
  134. proj-boot.vfat \
  135. proj-data.ext4 \
  136. proj-setting.ext4 \
  137. "
  138.  
  139.  
  140.  
  141.  
  142. IMAGE_CMD_proj-usb () {
  143. # Initialize a sparse file
  144. dd if=/dev/zero of=${SDCARD} bs=1024 count=0 seek=${SDCARD_SIZE}
  145. # where are we writing right now in KiB
  146. WRITE_MARK=0
  147. # create the partition table
  148. parted -s ${SDCARD} mklabel msdos
  149.  
  150.  
  151. # Add the bootloader just after the partition table (1024 bytes after the start, i.e 2xbloc_size)
  152. dd if=${BOOTLOADER_SOURCE} of=${SDCARD} conv=notrunc seek=1 bs=1024
  153. # move the write mark to BOOTLOADER_SPACE and align to IMAGE_ROOTFS_ALIGNMENT
  154. WRITE_MARK=$(expr ${BOOTLOADER_SPACE})
  155.  
  156.  
  157. # Add the boot partition aligned to the correct alignment, skiping th bootloader
  158. BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1)
  159. BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
  160. bbnote "BOOT_SPACE_ALIGNED=${BOOT_SPACE_ALIGNED}"
  161. parted -s ${SDCARD} unit KiB mkpart primary fat32 ${WRITE_MARK} $(expr ${WRITE_MARK} \+ ${BOOT_SPACE_ALIGNED})
  162. dd if=${BOOT_SOURCE} of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${WRITE_MARK} \* 1024)
  163. WRITE_MARK=$(expr ${WRITE_MARK} + $BOOT_SPACE_ALIGNED)
  164. bbnote "WRITE_MARK=$WRITE_MARK"
  165.  
  166. BS=$(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT})
  167.  
  168.  
  169. # Add the root partition
  170. ROOTFS_SIZE_ALIGNED=$(expr ${ROOTFS_SIZE} \+ ${IMAGE_ROOTFS_ALIGNMENT} \- 1)
  171. ROOTFS_SIZE_ALIGNED=$(expr ${ROOTFS_SIZE_ALIGNED} - ${ROOTFS_SIZE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
  172. bbnote "ROOTFS_SIZE=${ROOTFS_SIZE}"
  173. bbnote "ROOTFS_SIZE_ALIGNED=$ROOTFS_SIZE_ALIGNED"
  174. parted -s ${SDCARD} unit KiB mkpart primary $(expr ${WRITE_MARK}) $(expr ${WRITE_MARK} \+ $ROOTFS_SIZE_ALIGNED)
  175. dd if=${ROOTFS_SOURCE} of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${WRITE_MARK} \* 1024)
  176. WRITE_MARK=$(expr ${WRITE_MARK} + $ROOTFS_SIZE_ALIGNED)
  177. bbnote "WRITE_MARK=$WRITE_MARK"
  178.  
  179.  
  180. # Add the data partition
  181. DATA_SPACE_ALIGNED=$(expr ${DATA_SPACE} \+ ${IMAGE_ROOTFS_ALIGNMENT} \- 1)
  182. DATA_SPACE_ALIGNED=$(expr ${DATA_SPACE_ALIGNED} - ${DATA_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
  183. bbnote "DATA_SPACE_ALIGNED=$DATA_SPACE_ALIGNED"
  184. parted -s ${SDCARD} unit KiB mkpart primary ${WRITE_MARK} $(expr ${WRITE_MARK} \+ ${DATA_SPACE_ALIGNED})
  185. dd if=${DATA_SOURCE} of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${WRITE_MARK} \* 1024)
  186. WRITE_MARK=$(expr ${WRITE_MARK} + $DATA_SPACE_ALIGNED)
  187. bbnote "WRITE_MARK=$WRITE_MARK"
  188.  
  189. # Add the setting partition
  190. SETTING_SPACE_ALIGNED=$(expr ${SETTING_SPACE} \+ ${IMAGE_ROOTFS_ALIGNMENT} \- 1)
  191. SETTING_SPACE_ALIGNED=$(expr ${SETTING_SPACE_ALIGNED} - ${SETTING_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
  192. bbnote "SETTING_SPACE_ALIGNED=$SETTING_SPACE_ALIGNED"
  193. parted -s ${SDCARD} unit KiB mkpart primary ${WRITE_MARK} $(expr ${WRITE_MARK} \+ ${SETTING_SPACE_ALIGNED})
  194. parted ${SDCARD} print
  195. dd if=${SETTING_SOURCE} of=${SDCARD} conv=notrunc,fsync seek=1 bs=$(expr ${WRITE_MARK} \* 1024)
  196. WRITE_MARK=$(expr ${WRITE_MARK} + $SETTING_SPACE_ALIGNED)
  197. bbnote "WRITE_MARK=$WRITE_MARK"
  198.  
  199.  
  200. parted ${SDCARD} print
  201.  
  202.  
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement