aboutsummaryrefslogtreecommitdiff
path: root/docker-extras/disk_image
diff options
context:
space:
mode:
authorStefano Stabellini2019-08-01 16:04:41 -0700
committerStefano Stabellini2019-08-01 16:42:00 -0700
commit31ec364ae6ace3e6dc2c558bd3c386c76258c623 (patch)
treebba1f582ca3a0ea6a5cb6dcf050335bad31ec25c /docker-extras/disk_image
parentfda10db5497de7616cabf757183ed5a5b616b1b7 (diff)
Calculate image and partitions sizes automatically
Signed-off-by: Stefano Stabellini <stefanos@xilinx.com>
Diffstat (limited to 'docker-extras/disk_image')
-rwxr-xr-xdocker-extras/disk_image74
1 files changed, 51 insertions, 23 deletions
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