On Fri, 2013-09-13 at 19:08 -0500, Jason Wessel wrote:
> In order to call the fat image creation multiple times it needs to be
> in its own function.  A future commit will make use of the new
> function to additionally create EFI image files for use with an ISO.
> 
> [YOCTO #4100]
> [YOCTO #1913]
> 
> Signed-off-by: Jason Wessel <jason.wes...@windriver.com>

Looks good, thanks Jason!

Reviewed-by: Darren Hart <dvh...@linux.intel.com>

> ---
>  meta/classes/bootimg.bbclass |  110 
> ++++++++++++++++++++++--------------------
>  1 file changed, 58 insertions(+), 52 deletions(-)
> 
> diff --git a/meta/classes/bootimg.bbclass b/meta/classes/bootimg.bbclass
> index 90a241d..bd211fb 100644
> --- a/meta/classes/bootimg.bbclass
> +++ b/meta/classes/bootimg.bbclass
> @@ -111,6 +111,63 @@ build_iso() {
>       ln -s ${IMAGE_NAME}.iso ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.iso
>  }
>  
> +build_fat_img() {
> +     FATSOURCEDIR=$1
> +     FATIMG=$2
> +
> +     # Calculate the size required for the final image including the
> +     # data and filesystem overhead.
> +     # Sectors: 512 bytes
> +     #  Blocks: 1024 bytes
> +
> +     # Determine the sector count just for the data
> +     SECTORS=$(expr $(du --apparent-size -ks ${FATSOURCEDIR} | cut -f 1) \* 
> 2)
> +
> +     # Account for the filesystem overhead. This includes directory
> +     # entries in the clusters as well as the FAT itself.
> +     # Assumptions:
> +     #   FAT32 (12 or 16 may be selected by mkdosfs, but the extra
> +     #   padding will be minimal on those smaller images and not
> +     #   worth the logic here to caclulate the smaller FAT sizes)
> +     #   < 16 entries per directory
> +     #   8.3 filenames only
> +
> +     # 32 bytes per dir entry
> +     DIR_BYTES=$(expr $(find ${FATSOURCEDIR} | tail -n +2 | wc -l) \* 32)
> +     # 32 bytes for every end-of-directory dir entry
> +     DIR_BYTES=$(expr $DIR_BYTES + $(expr $(find ${FATSOURCEDIR} -type d | 
> tail -n +2 | wc -l) \* 32))
> +     # 4 bytes per FAT entry per sector of data
> +     FAT_BYTES=$(expr $SECTORS \* 4)
> +     # 4 bytes per FAT entry per end-of-cluster list
> +     FAT_BYTES=$(expr $FAT_BYTES + $(expr $(find ${FATSOURCEDIR} -type d | 
> tail -n +2 | wc -l) \* 4))
> +
> +     # Use a ceiling function to determine FS overhead in sectors
> +     DIR_SECTORS=$(expr $(expr $DIR_BYTES + 511) / 512)
> +     # There are two FATs on the image
> +     FAT_SECTORS=$(expr $(expr $(expr $FAT_BYTES + 511) / 512) \* 2)
> +     SECTORS=$(expr $SECTORS + $(expr $DIR_SECTORS + $FAT_SECTORS))
> +
> +     # Determine the final size in blocks accounting for some padding
> +     BLOCKS=$(expr $(expr $SECTORS / 2) + ${BOOTIMG_EXTRA_SPACE})
> +
> +     # Ensure total sectors is an integral number of sectors per
> +     # track or mcopy will complain. Sectors are 512 bytes, and we
> +     # generate images with 32 sectors per track. This calculation is
> +     # done in blocks, thus the mod by 16 instead of 32.
> +     BLOCKS=$(expr $BLOCKS + $(expr 16 - $(expr $BLOCKS % 16)))
> +
> +     # mkdosfs will sometimes use FAT16 when it is not appropriate,
> +     # resulting in a boot failure from SYSLINUX. Use FAT32 for
> +     # images larger than 512MB, otherwise let mkdosfs decide.
> +     if [ $(expr $BLOCKS / 1024) -gt 512 ]; then
> +             FATSIZE="-F 32"
> +     fi
> +
> +     mkdosfs ${FATSIZE} -n ${BOOTIMG_VOLUME_ID} -S 512 -C ${FATIMG} ${BLOCKS}
> +     # Copy FATSOURCEDIR recursively into the image file directly
> +     mcopy -i ${FATIMG} -s ${FATSOURCEDIR}/* ::/
> +}
> +
>  build_hddimg() {
>       # Create an HDD image
>       if [ "${NOHDD}" != "1" ] ; then
> @@ -123,58 +180,7 @@ build_hddimg() {
>                       grubefi_hddimg_populate
>               fi
>  
> -             # Calculate the size required for the final image including the
> -             # data and filesystem overhead.
> -             # Sectors: 512 bytes
> -             #  Blocks: 1024 bytes
> -
> -             # Determine the sector count just for the data
> -             SECTORS=$(expr $(du --apparent-size -ks ${HDDDIR} | cut -f 1) 
> \* 2)
> -
> -             # Account for the filesystem overhead. This includes directory
> -             # entries in the clusters as well as the FAT itself.
> -             # Assumptions:
> -             #   FAT32 (12 or 16 may be selected by mkdosfs, but the extra
> -             #   padding will be minimal on those smaller images and not
> -             #   worth the logic here to caclulate the smaller FAT sizes)
> -             #   < 16 entries per directory
> -             #   8.3 filenames only
> -
> -             # 32 bytes per dir entry
> -             DIR_BYTES=$(expr $(find ${HDDDIR} | tail -n +2 | wc -l) \* 32)
> -             # 32 bytes for every end-of-directory dir entry
> -             DIR_BYTES=$(expr $DIR_BYTES + $(expr $(find ${HDDDIR} -type d | 
> tail -n +2 | wc -l) \* 32))
> -             # 4 bytes per FAT entry per sector of data
> -             FAT_BYTES=$(expr $SECTORS \* 4)
> -             # 4 bytes per FAT entry per end-of-cluster list
> -             FAT_BYTES=$(expr $FAT_BYTES + $(expr $(find ${HDDDIR} -type d | 
> tail -n +2 | wc -l) \* 4))
> -
> -             # Use a ceiling function to determine FS overhead in sectors
> -             DIR_SECTORS=$(expr $(expr $DIR_BYTES + 511) / 512)
> -             # There are two FATs on the image
> -             FAT_SECTORS=$(expr $(expr $(expr $FAT_BYTES + 511) / 512) \* 2)
> -             SECTORS=$(expr $SECTORS + $(expr $DIR_SECTORS + $FAT_SECTORS))
> -
> -             # Determine the final size in blocks accounting for some padding
> -             BLOCKS=$(expr $(expr $SECTORS / 2) + ${BOOTIMG_EXTRA_SPACE})
> -
> -             # Ensure total sectors is an integral number of sectors per
> -             # track or mcopy will complain. Sectors are 512 bytes, and we
> -             # generate images with 32 sectors per track. This calculation is
> -             # done in blocks, thus the mod by 16 instead of 32.
> -             BLOCKS=$(expr $BLOCKS + $(expr 16 - $(expr $BLOCKS % 16)))
> -
> -             # mkdosfs will sometimes use FAT16 when it is not appropriate,
> -             # resulting in a boot failure from SYSLINUX. Use FAT32 for
> -             # images larger than 512MB, otherwise let mkdosfs decide.
> -             if [ $(expr $BLOCKS / 1024) -gt 512 ]; then
> -                     FATSIZE="-F 32"
> -             fi
> -
> -             IMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
> -             mkdosfs ${FATSIZE} -n ${BOOTIMG_VOLUME_ID} -S 512 -C ${IMG} 
> ${BLOCKS}
> -             # Copy HDDDIR recursively into the image file directly
> -             mcopy -i ${IMG} -s ${HDDDIR}/* ::/
> +             build_fat_img ${HDDDIR} ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
>  
>               if [ "${PCBIOS}" = "1" ]; then
>                       syslinux_hddimg_install

-- 
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel


_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to