summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorDarren Hart <dvhart@linux.intel.com>2012-04-11 10:51:10 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-04-14 23:10:49 +0100
commit4274ebdd009163bd199f6cb08df373fdfeb67178 (patch)
tree05d5918262fc573f39361ae401bf016f18b98522 /meta
parent0fbd6a161576b2cafa8583adde0ffb15347c884a (diff)
downloadpoky-4274ebdd009163bd199f6cb08df373fdfeb67178.tar.gz
bootimg: Use mcopy to construct the hddimg
Fixes [YOCTO 2138] 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> Backported to poky edison by Darren Hart. Signed-off-by: Darren Hart <dvhart@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/bootimg.bbclass22
1 files changed, 15 insertions, 7 deletions
diff --git a/meta/classes/bootimg.bbclass b/meta/classes/bootimg.bbclass
index 49ee85ea72..bcae2aeab1 100644
--- a/meta/classes/bootimg.bbclass
+++ b/meta/classes/bootimg.bbclass
@@ -62,13 +62,21 @@ build_boot_bin() {
62 62
63 install -m 444 ${STAGING_LIBDIR}/syslinux/ldlinux.sys ${HDDDIR}/ldlinux.sys 63 install -m 444 ${STAGING_LIBDIR}/syslinux/ldlinux.sys ${HDDDIR}/ldlinux.sys
64 64
65 # Do a little math, bash style 65 # Determine the 1024 byte block count for the final image.
66 #BLOCKS=`du -s ${HDDDIR} | cut -f 1` 66 BLOCKS=`du --apparent-size -ks ${HDDDIR} | cut -f 1`
67 BLOCKS=`du -bks ${HDDDIR} | cut -f 1` 67 SIZE=`expr $BLOCKS + ${BOOTIMG_EXTRA_SPACE}`
68 SIZE=`expr $BLOCKS + ${BOOTIMG_EXTRA_SPACE}` 68
69 69 # Ensure total sectors is an integral number of sectors per
70 mkdosfs -n ${BOOTIMG_VOLUME_ID} -d ${HDDDIR} \ 70 # track or mcopy will complain. Sectors are 512 bytes, and and
71 -C ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg $SIZE 71 # we generate images with 32 sectors per track. This calculation
72 # is done in blocks, which are twice the size of sectors, thus
73 # the 16 instead of 32.
74 SIZE=$(expr $SIZE + $(expr 16 - $(expr $SIZE % 16)))
75
76 IMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
77 mkdosfs -n ${BOOTIMG_VOLUME_ID} -S 512 -C ${IMG} ${SIZE}
78 # Copy HDDDIR recursively into the image file directly
79 mcopy -i ${IMG} -s ${HDDDIR}/* ::/
72 80
73 syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg 81 syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
74 chmod 644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg 82 chmod 644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg