diff --git a/classes/sdcard_image-rpi.bbclass b/classes/sdcard_image-rpi.bbclass index 3774318..05087b5 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