summaryrefslogtreecommitdiffstats
path: root/classes
diff options
context:
space:
mode:
authorAndrei Gherzan <andrei@gherzan.ro>2012-10-24 21:28:49 +0300
committerOtavio Salvador <otavio@ossystems.com.br>2012-10-29 16:13:38 -0200
commite6b33c90f2a89931be927e6d956bfc1099d5561a (patch)
treee74ca718d1775678cf8094f2e8616faeb270298a /classes
parent7d4828e8a2e7504f23ce2de1146ac60b3ec60ff9 (diff)
downloadmeta-fsl-arm-e6b33c90f2a89931be927e6d956bfc1099d5561a.tar.gz
image_types_fsl: Align SD partition and optimize final SD image
SD image file was 4G in size but actually the rootfs partition was only 60MB (in some images). The image file size is not fixed anymore but calculated inside this class. In this way we will setup the partition for rootfs to fit the ext file used as SDIMG_ROOTFS. By default the free space is calculated with IMAGE_OVERHEAD_FACTOR which is by default 1.3. If more free space is needed this can be overwritten. IMAGE_ROOTFS_ALIGNMENT set at 4096. This should be the best value for a SD card. Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
Diffstat (limited to 'classes')
-rw-r--r--classes/image_types_fsl.bbclass95
1 files changed, 72 insertions, 23 deletions
diff --git a/classes/image_types_fsl.bbclass b/classes/image_types_fsl.bbclass
index 1b58df8..1144bff 100644
--- a/classes/image_types_fsl.bbclass
+++ b/classes/image_types_fsl.bbclass
@@ -43,14 +43,14 @@ IMAGE_DEPENDS_uboot.mxsboot-sdcard = "u-boot-mxsboot-native u-boot"
43IMAGE_CMD_uboot.mxsboot-sdcard = "mxsboot sd ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX} \ 43IMAGE_CMD_uboot.mxsboot-sdcard = "mxsboot sd ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX} \
44 ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD}" 44 ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD}"
45 45
46# Default to 3.4GiB images
47SDCARD_SIZE ?= "3400"
48
49# Boot partition volume id 46# Boot partition volume id
50BOOTDD_VOLUME_ID ?= "Boot ${MACHINE}" 47BOOTDD_VOLUME_ID ?= "Boot ${MACHINE}"
51 48
52# Addional space for boot partition 49# Boot partition size [in KiB]
53BOOT_SPACE ?= "5MiB" 50BOOT_SPACE ?= "8192"
51
52# Set alignment to 4MB [in KiB]
53IMAGE_ROOTFS_ALIGNMENT = "4096"
54 54
55IMAGE_DEPENDS_sdcard = "parted-native dosfstools-native mtools-native \ 55IMAGE_DEPENDS_sdcard = "parted-native dosfstools-native mtools-native \
56 virtual/kernel ${IMAGE_BOOTLOADER}" 56 virtual/kernel ${IMAGE_BOOTLOADER}"
@@ -71,17 +71,29 @@ SDCARD_GENERATION_COMMAND_mx6 = "generate_imx_sdcard"
71# 71#
72# The disk layout used is: 72# The disk layout used is:
73# 73#
74# 0 - 1M - reserved to bootloader (not partitioned) 74# 0 -> IMAGE_ROOTFS_ALIGNMENT - reserved to bootloader (not partitioned)
75# 1M - BOOT_SPACE - kernel 75# IMAGE_ROOTFS_ALIGNMENT -> BOOT_SPACE - kernel and other data
76# BOOT_SPACE - SDCARD_SIZE - rootfs 76# BOOT_SPACE -> SDIMG_SIZE - rootfs
77# 77#
78# Default Free space = 1.3x
79# Use IMAGE_OVERHEAD_FACTOR to add more space
80# <--------->
81# 4MiB 8MiB SDIMG_ROOTFS 4MiB
82# <-----------------------> <----------> <----------------------> <------------------------------>
83# ------------------------ ------------ ------------------------ -------------------------------
84# | IMAGE_ROOTFS_ALIGNMENT | BOOT_SPACE | ROOTFS_SIZE | IMAGE_ROOTFS_ALIGNMENT |
85# ------------------------ ------------ ------------------------ -------------------------------
86# ^ ^ ^ ^ ^
87# | | | | |
88# 0 4096 4MiB + 8MiB 4MiB + 8Mib + SDIMG_ROOTFS 4MiB + 8MiB + SDIMG_ROOTFS + 4MiB
78generate_imx_sdcard () { 89generate_imx_sdcard () {
79 # Create partition table 90 # Create partition table
80 parted -s ${SDCARD} mklabel msdos 91 parted -s ${SDCARD} mklabel msdos
81 parted -s ${SDCARD} mkpart primary 1MiB ${BOOT_SPACE} 92 parted -s ${SDCARD} unit KiB mkpart primary ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED})
82 parted -s ${SDCARD} mkpart primary ${BOOT_SPACE} 100% 93 parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE)
83 parted ${SDCARD} print 94 parted ${SDCARD} print
84 95
96 # Burn bootloader
85 case "${IMAGE_BOOTLOADER}" in 97 case "${IMAGE_BOOTLOADER}" in
86 imx-bootlets) 98 imx-bootlets)
87 bberror "The imx-bootlets is not supported for i.MX based machines" 99 bberror "The imx-bootlets is not supported for i.MX based machines"
@@ -100,6 +112,7 @@ generate_imx_sdcard () {
100 ;; 112 ;;
101 esac 113 esac
102 114
115 # Create boot partition image
103 BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \ 116 BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \
104 | awk '/ 1 / { print substr($4, 1, length($4 -1)) / 1024 }') 117 | awk '/ 1 / { print substr($4, 1, length($4 -1)) / 1024 }')
105 mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -C ${WORKDIR}/boot.img $BOOT_BLOCKS 118 mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -C ${WORKDIR}/boot.img $BOOT_BLOCKS
@@ -112,8 +125,9 @@ generate_imx_sdcard () {
112 fi 125 fi
113 fi 126 fi
114 127
115 dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=1 bs=1M 128 # Burn Partition
116 dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc seek=1 bs=${BOOT_SPACE} 129 dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=1 bs=$(expr ${IMAGE_ROOTFS_ALIGNMENT} \* 1024) && sync && sync
130 dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc seek=1 bs=$(expr ${BOOT_SPACE_ALIGNED} \* 1024 + ${IMAGE_ROOTFS_ALIGNMENT} \* 1024) && sync && sync
117} 131}
118 132
119# 133#
@@ -132,11 +146,23 @@ generate_mxs_sdcard () {
132 imx-bootlets) 146 imx-bootlets)
133 # The disk layout used is: 147 # The disk layout used is:
134 # 148 #
135 # 1M - BOOT_SPACE - kernel 149 # 0 -> IMAGE_ROOTFS_ALIGNMENT - reserved for bootstream (not partitioned)
136 # BOOT_SPACE - SDCARD_SIZE - rootfs 150 # IMAGE_ROOTFS_ALIGNMENT -> BOOT_SPACE - kernel and other data
151 # BOOT_SPACE -> SDIMG_SIZE - rootfs
137 # 152 #
138 parted -s ${SDCARD} mkpart primary 1MiB ${BOOT_SPACE} 153 # Default Free space = 1.3x
139 parted -s ${SDCARD} mkpart primary ${BOOT_SPACE} 100% 154 # Use IMAGE_OVERHEAD_FACTOR to add more space
155 # <--------->
156 # 4MiB 8MiB SDIMG_ROOTFS 4KiB
157 # <-----------------------> <----------> <----------------------> <------------------------------>
158 # ------------------------ ------------ ------------------------ -------------------------------
159 # | IMAGE_ROOTFS_ALIGNMENT | BOOT_SPACE | ROOTFS_SIZE | IMAGE_ROOTFS_ALIGNMENT |
160 # ------------------------ ------------ ------------------------ -------------------------------
161 # ^ ^ ^ ^ ^
162 # | | | | |
163 # 0 4096 4MiB + 8MiB 4MiB + 8Mib + SDIMG_ROOTFS 4MiB + 8MiB + SDIMG_ROOTFS + 4MiB
164 parted -s ${SDCARD} unit KiB mkpart primary ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED})
165 parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE)
140 166
141 # Empty 4 bytes from boot partition 167 # Empty 4 bytes from boot partition
142 dd if=/dev/zero of=${SDCARD} conv=notrunc seek=2048 count=4 168 dd if=/dev/zero of=${SDCARD} conv=notrunc seek=2048 count=4
@@ -151,11 +177,29 @@ generate_mxs_sdcard () {
151 # 2M - BOOT_SPACE - kernel 177 # 2M - BOOT_SPACE - kernel
152 # BOOT_SPACE - SDCARD_SIZE - rootfs 178 # BOOT_SPACE - SDCARD_SIZE - rootfs
153 # 179 #
154 parted -s ${SDCARD} mkpart primary 1MiB 2MiB 180 # The disk layout used is:
155 parted -s ${SDCARD} mkpart primary 2MiB ${BOOT_SPACE} 181 #
156 parted -s ${SDCARD} mkpart primary ${BOOT_SPACE} 100% 182 # 1M -> 2M - reserved to bootloader and other data
183 # 2M -> BOOT_SPACE - kernel and other data
184 # BOOT_SPACE -> SDIMG_SIZE - rootfs
185 #
186 # Default Free space = 1.3x
187 # Use IMAGE_OVERHEAD_FACTOR to add more space
188 # <--------->
189 # 4MiB 8MiB SDIMG_ROOTFS 4MiB
190 # <-----------------------> <-------------> <----------------------> <------------------------------>
191 # ---------------------------------------- ------------------------ -------------------------------
192 # | | | |ROOTFS_SIZE | IMAGE_ROOTFS_ALIGNMENT |
193 # ---------------------------------------- ------------------------ -------------------------------
194 # ^ ^ ^ ^ ^ ^ ^
195 # | | | | | | |
196 # 0 1M 2M 4M 4MiB + BOOTSPACE 4MiB + BOOTSPACE + SDIMG_ROOTFS 4MiB + BOOTSPACE + SDIMG_ROOTFS + 4MiB
197 #
198 parted -s ${SDCARD} unit KiB mkpart primary 1024 2048
199 parted -s ${SDCARD} unit KiB mkpart primary 2048 $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED})
200 parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE)
157 201
158 dd if=${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD} of=${SDCARD} conv=notrunc seek=1 skip=${UBOOT_PADDING} bs=1MiB 202 dd if=${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.${UBOOT_SUFFIX_SDCARD} of=${SDCARD} conv=notrunc seek=1 skip=${UBOOT_PADDING} bs=$(expr 1024 \* 1024)
159 BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \ 203 BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDCARD} unit b print \
160 | awk '/ 2 / { print substr($4, 1, length($4 -1)) / 1024 }') 204 | awk '/ 2 / { print substr($4, 1, length($4 -1)) / 1024 }')
161 205
@@ -169,7 +213,7 @@ generate_mxs_sdcard () {
169 fi 213 fi
170 fi 214 fi
171 215
172 dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=2 bs=1MiB 216 dd if=${WORKDIR}/boot.img of=${SDCARD} conv=notrunc seek=2 bs=$(expr 1024 \* 1024)
173 ;; 217 ;;
174 *) 218 *)
175 bberror "Unkown IMAGE_BOOTLOADER value" 219 bberror "Unkown IMAGE_BOOTLOADER value"
@@ -183,7 +227,7 @@ generate_mxs_sdcard () {
183 227
184 parted ${SDCARD} print 228 parted ${SDCARD} print
185 229
186 dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc seek=1 bs=${BOOT_SPACE} 230 dd if=${SDCARD_ROOTFS} of=${SDCARD} conv=notrunc seek=1 bs=$(expr ${BOOT_SPACE_ALIGNED} \* 1024 + ${IMAGE_ROOTFS_ALIGNMENT} \* 1024) && sync && sync
187} 231}
188 232
189IMAGE_CMD_sdcard () { 233IMAGE_CMD_sdcard () {
@@ -192,8 +236,13 @@ IMAGE_CMD_sdcard () {
192 exit 1 236 exit 1
193 fi 237 fi
194 238
239 # Align boot partition and calculate total SD card image size
240 BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1)
241 BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
242 SDCARD_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + $ROOTFS_SIZE + ${IMAGE_ROOTFS_ALIGNMENT})
243
195 # Initialize a sparse file 244 # Initialize a sparse file
196 dd if=/dev/zero of=${SDCARD} bs=1 count=0 seek=$(expr 1000 \* 1000 \* ${SDCARD_SIZE}) 245 dd if=/dev/zero of=${SDCARD} bs=1 count=0 seek=$(expr 1024 \* ${SDCARD_SIZE})
197 246
198 ${SDCARD_GENERATION_COMMAND} 247 ${SDCARD_GENERATION_COMMAND}
199} 248}