diff options
author | Jan Schmidt <thaytan@noraisin.net> | 2013-05-02 08:46:58 +1000 |
---|---|---|
committer | Andrei Gherzan <andrei@gherzan.ro> | 2013-05-02 13:10:14 +0200 |
commit | c5f81306b58e91f1c845da063c2476733cdb5bf5 (patch) | |
tree | 0ad34ee4d69109878d3b5b318e2bbb19aac6279d | |
parent | 8ad03b9533d6e0361a30a2795ffb90a4ce8db87e (diff) | |
download | meta-raspberrypi-c5f81306b58e91f1c845da063c2476733cdb5bf5.tar.gz |
sdcard_image-rpi: Use the size of the generated rootfs
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@noraisin.net>
Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
-rw-r--r-- | classes/sdcard_image-rpi.bbclass | 30 |
1 files changed, 18 insertions, 12 deletions
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 | |||
13 | # Default Free space = 1.3x | 13 | # Default Free space = 1.3x |
14 | # Use IMAGE_OVERHEAD_FACTOR to add more space | 14 | # Use IMAGE_OVERHEAD_FACTOR to add more space |
15 | # <---------> | 15 | # <---------> |
16 | # 4KiB 20MiB SDIMG_ROOTFS | 16 | # 4MiB 20MiB SDIMG_ROOTFS |
17 | # <-----------------------> <----------> <----------------------> | 17 | # <-----------------------> <----------> <----------------------> |
18 | # ------------------------ ------------ ------------------------ ------------------------------- | 18 | # ------------------------ ------------ ------------------------ |
19 | # | IMAGE_ROOTFS_ALIGNMENT | BOOT_SPACE | ROOTFS_SIZE | IMAGE_ROOTFS_ALIGNMENT | | 19 | # | IMAGE_ROOTFS_ALIGNMENT | BOOT_SPACE | ROOTFS_SIZE | |
20 | # ------------------------ ------------ ------------------------ ------------------------------- | 20 | # ------------------------ ------------ ------------------------ |
21 | # ^ ^ ^ ^ ^ | 21 | # ^ ^ ^ ^ |
22 | # | | | | | | 22 | # | | | | |
23 | # 0 4096 4KiB + 20MiB 4KiB + 20Mib + SDIMG_ROOTFS 4KiB + 20MiB + SDIMG_ROOTFS + 4KiB | 23 | # 0 4MiB 4MiB + 20MiB 4MiB + 20Mib + SDIMG_ROOTFS |
24 | 24 | ||
25 | 25 | ||
26 | # Set kernel and boot loader | 26 | # Set kernel and boot loader |
@@ -29,7 +29,7 @@ IMAGE_BOOTLOADER ?= "bcm2835-bootfiles" | |||
29 | # Boot partition volume id | 29 | # Boot partition volume id |
30 | BOOTDD_VOLUME_ID ?= "${MACHINE}" | 30 | BOOTDD_VOLUME_ID ?= "${MACHINE}" |
31 | 31 | ||
32 | # Boot partition size [in KiB] | 32 | # Boot partition size [in KiB] (will be rounded up to IMAGE_ROOTFS_ALIGNMENT) |
33 | BOOT_SPACE ?= "20480" | 33 | BOOT_SPACE ?= "20480" |
34 | 34 | ||
35 | # Set alignment to 4MB [in KiB] | 35 | # Set alignment to 4MB [in KiB] |
@@ -60,18 +60,24 @@ IMAGE_CMD_rpi-sdimg () { | |||
60 | # Align partitions | 60 | # Align partitions |
61 | BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1) | 61 | BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1) |
62 | BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT}) | 62 | BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT}) |
63 | SDIMG_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + $ROOTFS_SIZE + ${IMAGE_ROOTFS_ALIGNMENT}) | 63 | ROOTFS_SIZE=`du -bks ${SDIMG_ROOTFS} | awk '{print $1}'` |
64 | # Round up RootFS size to the alignment size as well | ||
65 | ROOTFS_SIZE_ALIGNED=$(expr ${ROOTFS_SIZE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1) | ||
66 | ROOTFS_SIZE_ALIGNED=$(expr ${ROOTFS_SIZE_ALIGNED} - ${ROOTFS_SIZE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT}) | ||
67 | SDIMG_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + ${ROOTFS_SIZE_ALIGNED}) | ||
68 | |||
69 | echo "Creating filesystem with Boot partition ${BOOT_SPACE_ALIGNED} KiB and RootFS ${ROOTFS_SIZE_ALIGNED} KiB" | ||
64 | 70 | ||
65 | # Initialize sdcard image file | 71 | # Initialize sdcard image file |
66 | dd if=/dev/zero of=${SDIMG} bs=1 count=0 seek=$(expr 1024 \* ${SDIMG_SIZE}) | 72 | dd if=/dev/zero of=${SDIMG} bs=1024 count=0 seek=${SDIMG_SIZE} |
67 | 73 | ||
68 | # Create partition table | 74 | # Create partition table |
69 | parted -s ${SDIMG} mklabel msdos | 75 | parted -s ${SDIMG} mklabel msdos |
70 | # Create boot partition and mark it as bootable | 76 | # Create boot partition and mark it as bootable |
71 | parted -s ${SDIMG} unit KiB mkpart primary fat32 ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT}) | 77 | parted -s ${SDIMG} unit KiB mkpart primary fat32 ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT}) |
72 | parted -s ${SDIMG} set 1 boot on | 78 | parted -s ${SDIMG} set 1 boot on |
73 | # Create rootfs partition | 79 | # Create rootfs partition to the end of disk |
74 | parted -s ${SDIMG} unit KiB mkpart primary ext2 $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT}) $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT} \+ ${ROOTFS_SIZE}) | 80 | parted -s ${SDIMG} -- unit KiB mkpart primary ext2 $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT}) -1s |
75 | parted ${SDIMG} print | 81 | parted ${SDIMG} print |
76 | 82 | ||
77 | # Create a vfat image with boot files | 83 | # Create a vfat image with boot files |