Set rootfs size based on real size of rootfs image 49/7349/4
authorAnton Gerasimov <anton@advancedtelematic.com>
Wed, 30 Nov 2016 14:07:18 +0000 (15:07 +0100)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Fri, 2 Dec 2016 09:58:08 +0000 (09:58 +0000)
ROOTFS_SIZE is recomputed for each image type based on total size of
rootfs directory. If rootfs directory gets smaller between creation of
rootfs image and SD image, it fill result in corrupted SD image.
It should not happen in theory, but it happens occasionally for a reason
I could not identify.

Change-Id: I1c888c179fdcec32c3cacbbce7b2d34ec70bbb17
Signed-off-by: Anton Gerasimov <anton@advancedtelematic.com>
meta-agl-bsp/classes/sdcard_image-rpi-gdp.bbclass

index 2956dd0..b263239 100644 (file)
@@ -2,12 +2,28 @@ inherit sdcard_image-rpi
 
 IMAGE_CMD_rpi-sdimg () {
 
+       # Get rootfs size
+       if echo "${SDIMG_ROOTFS_TYPE}" | egrep -q "*\.xz"
+       then
+               ROOTPART_SIZE=`xz -l --robot ${SDIMG_ROOTFS} | grep "^file" | cut -f`
+       else
+               ROOTPART_SIZE=`du -Lb ${SDIMG_ROOTFS} | cut -f1`
+       fi
+
+       ROOTPART_SIZE=$(expr ${ROOTPART_SIZE} / 1024)
+
+       # just in case our file system block size is not a multiple of 1KiB
+       if [ $(expr ${ROOTPART_SIZE} % 1024) != 0 ];
+       then
+               ROOTPART_SIZE=$(expr ${ROOTPART_SIZE} + 1)
+       fi
+
        # 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)
+       SDIMG_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + $ROOTPART_SIZE)
 
-       echo "Creating filesystem with Boot partition ${BOOT_SPACE_ALIGNED} KiB and RootFS $ROOTFS_SIZE KiB"
+       echo "Creating filesystem with Boot partition ${BOOT_SPACE_ALIGNED} KiB and RootFS $ROOTPART_SIZE KiB"
 
        # Check if we are building with device tree support
        DTS="${@get_dts(d, None)}"