From 31ec364ae6ace3e6dc2c558bd3c386c76258c623 Mon Sep 17 00:00:00 2001 From: Stefano Stabellini Date: Thu, 1 Aug 2019 16:04:41 -0700 Subject: Calculate image and partitions sizes automatically Signed-off-by: Stefano Stabellini --- docker-extras/disk_image | 74 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 23 deletions(-) (limited to 'docker-extras/disk_image') diff --git a/docker-extras/disk_image b/docker-extras/disk_image index 2d70ad3..344c727 100755 --- a/docker-extras/disk_image +++ b/docker-extras/disk_image @@ -11,36 +11,64 @@ mkdir ${OUTDIR} IMG="${OUTDIR}/zynqmp.img" +. config + +offset=$((2*1024*1024)) +_part1_size=`stat --printf="%s" $UBOOT_OUT/$XEN` +_part1_size=$(( $_part1_size + `stat --printf="%s" $UBOOT_OUT/$DOM0_KERNEL` )) +_part1_size=$(( $_part1_size + `stat --printf="%s" $UBOOT_OUT/$DEVICE_TREE` )) +i=0 +while test $i -lt $NUM_DOMUS +do + _part1_size=$(( $_part1_size + `stat --printf="%s" $UBOOT_OUT/${DOMU_KERNEL[$i]}` )) + if test "${DOMU_RAMDISK[$i]}" + then + _part1_size=$(( $_part1_size + `stat --printf="%s" $UBOOT_OUT/${DOMU_RAMDISK[$i]}` )) + fi + if test "${DOMU_PASSTHROUGH_DTB[$i]}" + then + _part1_size=$(( $_part1_size + `stat --printf="%s" $UBOOT_OUT/${DOMU_PASSTHROUGH_DTB[$i]}` )) + fi + i=$(( $i + 1 )) +done + +# add 16 MB slack +_part1_size=$(( $_part1_size + 16777216 )) +_part1_size=$(( $_part1_size + $offset - 1)) +_part1_size=$(( $_part1_size & ~($offset - 1) )) +_part1_size=$(( $_part1_size / 1024 / 1024 )) +echo PART1 size: "$_part1_size"MB + +if test "$DOM0_RAMDISK" +then + _part2_size=`stat --printf="%s" $UBOOT_OUT/$DOM0_RAMDISK` +fi +_part2_size=$(( $_part2_size + $offset - 1)) +_part2_size=$(( $_part2_size & ~($offset - 1) )) +# account for gzip compression +_part2_size=$(( $_part2_size * 2 )) +# add some slack +_part2_size=$(( 128*1024*1024 + $_part2_size )) +_part2_size=$(( $_part2_size / 1024 / 1024 )) +echo PART2 size: "$_part2_size"MB + + +_sector_size=512 +# _sector_first_start needs to be aligned to 2048 +_sector_first_start=2048 +_sector_first_end=$(( $_part1_size * 1024 * 1024 / $_sector_size + $_sector_first_start - 1)) +_sector_second_start=$(( $_sector_first_end + 1 )) +_sector_second_end=$(( $_part2_size * 1024 * 1024 / $_sector_size + $_sector_second_start - 1)) +_tot_size=$(( $_part1_size + $_part2_size + 16 )) + # NOTE: Increase vos_a to 256 to accomodate rootfs # 528 MiB (256 + 256 + 16) -truncate $IMG -s 528M +truncate $IMG -s "$_tot_size"M # create GPT partition table sgdisk -og $IMG -# _sector_first_start needs to be aligned to 2048 -_sector_first_start=2048 - -# _sector_first_end is obtained by running -# ``` -# sgdisk -n 1:2048:+256M -c 1:"Linux" -t 1:8300 /tmp/img/zynqmp.img -# ``` -_sector_first_end=526335 - -# create linux partition sgdisk -n 1:$_sector_first_start:$_sector_first_end -c 1:"Linux1" -t 1:8300 $IMG - -# _sector_second_start is obtained by running -# ``` -# sgdisk -F /tmp/img/zynqmp.img -# ``` -_sector_second_start=526336 - -# _sector_second_end is obtained by running -# ``` -# sgdisk -n 2:526336:+256M -c 2:"Linux2" -t 2:8300 /tmp/img/zynqmp.img -# ``` -_sector_second_end=1050623 sgdisk -n 2:$_sector_second_start:$_sector_second_end -c 2:"Linux2" -t 2:8300 $IMG # find the first available loop device -- cgit v1.2.3