On Thursday 14 March 2013 07:57:59 Jan Schmidt wrote:
> When constructing the SD card image, the code was using
> the inherited ROOTFS_SIZE, which is the size of the
> rootfs contents. When building (for example) a compressed
> rootfs, this allocates a partition much larger than necessary.
> 
> Instead, take the size of the generated rootfs file that is
> about to be written into the generated image, and round it
> up to the IMAGE_ROOTFS_ALIGNMENT size.
> 
> Fix some comments - the alignment is 4MiB, not 4KiB.
> 
> Signed-off-by: Jan Schmidt <thay...@noraisin.net>
> ---
>  classes/sdcard_image-rpi.bbclass |   30 ++++++++++++++++++------------
>  1 file changed, 18 insertions(+), 12 deletions(-)
> 
> diff --git a/classes/sdcard_image-rpi.bbclass
> b/classes/sdcard_image-rpi.bbclass index 421f561..3f0a16e 100644
> --- a/classes/sdcard_image-rpi.bbclass
> +++ b/classes/sdcard_image-rpi.bbclass
> @@ -13,14 +13,14 @@ inherit image_types
>  #                                                     Default Free space =
> 1.3x #                                                     Use
> IMAGE_OVERHEAD_FACTOR to add more space #                                  
>                   <---------> -#            4KiB              20MiB        
>   SDIMG_ROOTFS
> +#            4MiB              20MiB           SDIMG_ROOTFS
>  # <-----------------------> <----------> <---------------------->
> -#  ------------------------ ------------ ------------------------
> ------------------------------- -# | IMAGE_ROOTFS_ALIGNMENT | BOOT_SPACE |
> ROOTFS_SIZE            |     IMAGE_ROOTFS_ALIGNMENT    | -# 
> ------------------------ ------------ ------------------------
> ------------------------------- -# ^                        ^            ^ 
>                       ^                               ^ -# |               
>         |            |                        |                            
>   | -# 0                      4096     4KiB + 20MiB       4KiB + 20Mib +
> SDIMG_ROOTFS   4KiB + 20MiB + SDIMG_ROOTFS + 4KiB +# 
> ------------------------ ------------ ------------------------ +# |
> IMAGE_ROOTFS_ALIGNMENT | BOOT_SPACE | ROOTFS_SIZE            | +# 
> ------------------------ ------------ ------------------------ +# ^        
>                ^            ^                        ^ +# |                
>        |            |                        | +# 0                     
> 4MiB     4MiB + 20MiB       4MiB + 20Mib + SDIMG_ROOTFS
> 
> 
>  # Set kernel and boot loader
> @@ -29,7 +29,7 @@ IMAGE_BOOTLOADER ?= "bcm2835-bootfiles"
>  # Boot partition volume id
>  BOOTDD_VOLUME_ID ?= "${MACHINE}"
> 
> -# Boot partition size [in KiB]
> +# Boot partition size [in KiB] (will be rounded up to
> IMAGE_ROOTFS_ALIGNMENT) BOOT_SPACE ?= "20480"
> 
>  # Set alignment to 4MB [in KiB]
> @@ -60,18 +60,24 @@ IMAGE_CMD_rpi-sdimg () {
>       # Align partitions
>       BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1)
>       BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} 
> %
> ${IMAGE_ROOTFS_ALIGNMENT}) -  SDIMG_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} +
> ${BOOT_SPACE_ALIGNED} + $ROOTFS_SIZE + ${IMAGE_ROOTFS_ALIGNMENT})
> +     ROOTFS_SIZE=`du -bks ${SDIMG_ROOTFS} | awk '{print $1}'`
> +        # Round up RootFS size to the alignment size as well
> +     ROOTFS_SIZE_ALIGNED=$(expr ${ROOTFS_SIZE} + ${IMAGE_ROOTFS_ALIGNMENT} - 
> 1)
> +     ROOTFS_SIZE_ALIGNED=$(expr ${ROOTFS_SIZE_ALIGNED} -
> ${ROOTFS_SIZE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT}) + SDIMG_SIZE=$(expr
> ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + ${ROOTFS_SIZE_ALIGNED})
> +
> +     echo "Creating filesystem with Boot partition ${BOOT_SPACE_ALIGNED} KiB
> and RootFS ${ROOTFS_SIZE_ALIGNED} KiB"
> 
>       # Initialize sdcard image file
> -     dd if=/dev/zero of=${SDIMG} bs=1 count=0 seek=$(expr 1024 \*
> ${SDIMG_SIZE}) +      dd if=/dev/zero of=${SDIMG} bs=1024 count=0
> seek=${SDIMG_SIZE}
> 
>       # Create partition table
>       parted -s ${SDIMG} mklabel msdos
>       # Create boot partition and mark it as bootable
>       parted -s ${SDIMG} unit KiB mkpart primary fat32 
${IMAGE_ROOTFS_ALIGNMENT}
> $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT}) parted -s
> ${SDIMG} set 1 boot on
> -     # Create rootfs partition
> -     parted -s ${SDIMG} unit KiB mkpart primary ext2 $(expr
> ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT}) $(expr
> ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT} \+ ${ROOTFS_SIZE}) +       
> #
> Create rootfs partition to the end of disk
> +     parted -s ${SDIMG} -- unit KiB mkpart primary ext2 $(expr
> ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT}) -1s parted ${SDIMG}
> print
> 
>       # Create a vfat image with boot files

Looks like this is a patch for meta-raspberrypi although it isn't marked as 
such. Andrei, have you seen this?

Cheers,
Paul

-- 

Paul Eggleton
Intel Open Source Technology Centre
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to