[yocto] [PATCH] sdcard-image: Use the size of the generated rootfs

Paul Eggleton paul.eggleton at linux.intel.com
Thu Apr 4 03:37:16 PDT 2013


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 <thaytan at 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



More information about the yocto mailing list