summaryrefslogtreecommitdiffstats
path: root/meta/classes/bootimg.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/bootimg.bbclass')
-rw-r--r--meta/classes/bootimg.bbclass45
1 files changed, 36 insertions, 9 deletions
diff --git a/meta/classes/bootimg.bbclass b/meta/classes/bootimg.bbclass
index bcae2aeab1..c2d43c86ee 100644
--- a/meta/classes/bootimg.bbclass
+++ b/meta/classes/bootimg.bbclass
@@ -62,19 +62,46 @@ 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 # Determine the 1024 byte block count for the final image. 65 # Calculate the size required for the final image including the
66 BLOCKS=`du --apparent-size -ks ${HDDDIR} | cut -f 1` 66 # data and filesystem overhead.
67 SIZE=`expr $BLOCKS + ${BOOTIMG_EXTRA_SPACE}` 67 # Sectors: 512 bytes
68 # Blocks: 1024 bytes
69
70 # Determine the sector count just for the data
71 SECTORS=$(expr $(du --apparent-size -ks ${HDDDIR} | cut -f 1) \* 2)
72
73 # Account for the filesystem overhead. This includes directory
74 # entries in the clusters as well as the FAT itself.
75 # Assumptions:
76 # < 16 entries per directory
77 # 8.3 filenames only
78
79 # 32 bytes per dir entry
80 DIR_BYTES=$(expr $(find ${HDDDIR} | tail -n +2 | wc -l) \* 32)
81 # 32 bytes for every end-of-directory dir entry
82 DIR_BYTES=$(expr $DIR_BYTES + $(expr $(find ${HDDDIR} -type d | tail -n +2 | wc -l) \* 32))
83 # 4 bytes per FAT entry per sector of data
84 FAT_BYTES=$(expr $SECTORS \* 4)
85 # 4 bytes per FAT entry per end-of-cluster list
86 FAT_BYTES=$(expr $FAT_BYTES + $(expr $(find ${HDDDIR} -type d | tail -n +2 | wc -l) \* 4))
87
88 # Use a ceiling function to determine FS overhead in sectors
89 DIR_SECTORS=$(expr $(expr $DIR_BYTES + 511) / 512)
90 # There are two FATs on the image
91 FAT_SECTORS=$(expr $(expr $(expr $FAT_BYTES + 511) / 512) \* 2)
92 SECTORS=$(expr $SECTORS + $(expr $DIR_SECTORS + $FAT_SECTORS))
93
94 # Determine the final size in blocks accounting for some padding
95 BLOCKS=$(expr $(expr $SECTORS \* 2) + ${BOOTIMG_EXTRA_SPACE})
68 96
69 # Ensure total sectors is an integral number of sectors per 97 # Ensure total sectors is an integral number of sectors per
70 # track or mcopy will complain. Sectors are 512 bytes, and and 98 # track or mcopy will complain. Sectors are 512 bytes, and we
71 # we generate images with 32 sectors per track. This calculation 99 # generate images with 32 sectors per track. This calculation is
72 # is done in blocks, which are twice the size of sectors, thus 100 # done in blocks, thus the mod by 16 instead of 32.
73 # the 16 instead of 32. 101 BLOCKS=$(expr $BLOCKS + $(expr 16 - $(expr $BLOCKS % 16)))
74 SIZE=$(expr $SIZE + $(expr 16 - $(expr $SIZE % 16)))
75 102
76 IMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg 103 IMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
77 mkdosfs -n ${BOOTIMG_VOLUME_ID} -S 512 -C ${IMG} ${SIZE} 104 mkdosfs -F 32 -n ${BOOTIMG_VOLUME_ID} -S 512 -C ${IMG} ${BLOCKS}
78 # Copy HDDDIR recursively into the image file directly 105 # Copy HDDDIR recursively into the image file directly
79 mcopy -i ${IMG} -s ${HDDDIR}/* ::/ 106 mcopy -i ${IMG} -s ${HDDDIR}/* ::/
80 107