summaryrefslogtreecommitdiffstats
path: root/meta/classes/bootimg.bbclass
diff options
context:
space:
mode:
authorDarren Hart <dvhart@linux.intel.com>2011-12-15 22:14:19 -0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-12-16 16:05:36 +0000
commit4d1c00fb0a67d0a94b126f0602973979d9dd3ebf (patch)
treeee2d3006d36b3e1260e81f4ed87712799beb70b4 /meta/classes/bootimg.bbclass
parentc1f3f3f7a7e6e405fb4deba228cc40ed3b6561be (diff)
downloadpoky-4d1c00fb0a67d0a94b126f0602973979d9dd3ebf.tar.gz
bootimg: Use mcopy to construct the hddimg
The initial directory support (-d) added to mkdosfs has proven to be incomplete and non-compliant with FAT. Rather than continue to maintain this feature and work around the various issues, we can use mcopy to construct the image. bootimg.bbclass already depends on mtools-native (although it may not have needed to previously). No new dependencies are introduced. The image created passes dosfsck cleanly. Remove the call to dosfsck. mcopy reported an error with the image we were creating: Total number of sectors (107574) not a multiple of sectors per track (32)! Add some logic to ensure the total sector count is an integral number of sectors per track, including forcing the logical sector size to 512 in the mkdosfs command. The du -bks arguments are contradictory, -b is equivalent to "--apparent-size --block-size=1" and -k is --block-size=1K. If reordered, -kbs will report the disk usage in bytes insteadk of 1k blocks. Eliminate the ambiguity by using: du --apparent-size -ks (From OE-Core rev: 92d2ea1a306354c6565a1b05b51b5719e481840f) Signed-off-by: Darren Hart <dvhart@linux.intel.com> CC: Nitin A. Kamble <nitin.a.kamble@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/bootimg.bbclass')
-rw-r--r--meta/classes/bootimg.bbclass18
1 files changed, 13 insertions, 5 deletions
diff --git a/meta/classes/bootimg.bbclass b/meta/classes/bootimg.bbclass
index 8ec07a04ee..b50202f68f 100644
--- a/meta/classes/bootimg.bbclass
+++ b/meta/classes/bootimg.bbclass
@@ -103,13 +103,21 @@ build_hddimg() {
103 grubefi_hddimg_populate 103 grubefi_hddimg_populate
104 fi 104 fi
105 105
106 # Determine the block count for the final image 106 # Determine the 1024 byte block count for the final image.
107 BLOCKS=`du -bks ${HDDDIR} | cut -f 1` 107 BLOCKS=`du --apparent-size -ks ${HDDDIR} | cut -f 1`
108 SIZE=`expr $BLOCKS + ${BOOTIMG_EXTRA_SPACE}` 108 SIZE=`expr $BLOCKS + ${BOOTIMG_EXTRA_SPACE}`
109 109
110 mkdosfs -n ${BOOTIMG_VOLUME_ID} -d ${HDDDIR} \ 110 # Ensure total sectors is an integral number of sectors per
111 -C ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg $SIZE 111 # track or mcopy will complain. Sectors are 512 bytes, and and
112 dosfsck -a -l ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg || true 112 # we generate images with 32 sectors per track. This calculation
113 # is done in blocks, which are twice the size of sectors, thus
114 # the 16 instead of 32.
115 SIZE=$(expr $SIZE + $(expr 16 - $(expr $SIZE % 16)))
116
117 IMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
118 mkdosfs -n ${BOOTIMG_VOLUME_ID} -S 512 -C ${IMG} ${SIZE}
119 # Copy HDDDIR recursively into the image file directly
120 mcopy -i ${IMG} -s ${HDDDIR}/* ::/
113 121
114 if [ "${PCBIOS}" = "1" ]; then 122 if [ "${PCBIOS}" = "1" ]; then
115 syslinux_hddimg_install 123 syslinux_hddimg_install