summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@noraisin.net>2013-05-02 08:46:58 +1000
committerAndrei Gherzan <andrei@gherzan.ro>2013-05-02 13:10:14 +0200
commitc5f81306b58e91f1c845da063c2476733cdb5bf5 (patch)
tree0ad34ee4d69109878d3b5b318e2bbb19aac6279d
parent8ad03b9533d6e0361a30a2795ffb90a4ce8db87e (diff)
downloadmeta-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.bbclass30
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
30BOOTDD_VOLUME_ID ?= "${MACHINE}" 30BOOTDD_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)
33BOOT_SPACE ?= "20480" 33BOOT_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