From 9ab1b1d15ff41829385e65555592cac08448d1e0 Mon Sep 17 00:00:00 2001 From: Stefano Stabellini Date: Mon, 15 Jul 2019 16:07:57 -0700 Subject: Call disk_image from imagebuilder_run, introduce imagebuilder_sd Signed-off-by: Stefano Stabellini --- docker-extras/disk_image | 106 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100755 docker-extras/disk_image (limited to 'docker-extras/disk_image') diff --git a/docker-extras/disk_image b/docker-extras/disk_image new file mode 100755 index 0000000..2d70ad3 --- /dev/null +++ b/docker-extras/disk_image @@ -0,0 +1,106 @@ +#!/bin/sh + +# This helps to see what is going on +set -e -x + +# Used to maintain intermediary state. (Not currently used) +DESTDIR="$(mktemp -d /tmp/imagebuilder-zynqmp.XXXXXX)" +UBOOT_OUT="/tmp/output" +OUTDIR="/tmp/img" +mkdir ${OUTDIR} + +IMG="${OUTDIR}/zynqmp.img" + +# NOTE: Increase vos_a to 256 to accomodate rootfs +# 528 MiB (256 + 256 + 16) +truncate $IMG -s 528M + +# 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 +_loop_dev=$(losetup -f) + +# attach loopback device to $IMG +losetup $_loop_dev $IMG + +_disksize=$(blockdev --getsize $_loop_dev) + +dmsetup create diskimage --table "0 $_disksize linear $_loop_dev 0" + +# ensure that /dev/mapper/diskimage exists +while [ ! -b /dev/mapper/diskimage ] +do + sleep 2 +done + +kpartx -a /dev/mapper/diskimage + +# ensure that /dev/mapper/{diskimage1,diskimage2} exists +while [ ! -b /dev/mapper/diskimage1 ] || [ ! -b /dev/mapper/diskimage2 ] +do + sleep 2 +done + +# format vos_a partition +mkfs.ext4 -L vos_a -F /dev/mapper/diskimage1 + +# format vos_b partition +mkfs.ext4 -L vos_b -F /dev/mapper/diskimage2 + + +# create mount point and mount disk2 +mkdir -p ${DESTDIR}/part/disk2 +mount -t ext4 /dev/mapper/diskimage2 $DESTDIR/part/disk2 + +# Extract rootfs cpio archive into `.../part/vos_a` +cd ${DESTDIR}/part/disk2 +cat ${UBOOT_OUT}/dom0-ramdisk.cpio | gunzip | cpio -id +mv ${UBOOT_OUT}/dom0-ramdisk.cpio* /tmp + +# umount +sync +cd / +umount $DESTDIR/part/disk2 + +# create mount point and mount disk1 +mkdir -p ${DESTDIR}/part/disk1 +mount -t ext4 /dev/mapper/diskimage1 $DESTDIR/part/disk1 + +# copy over files needed +cp -r $UBOOT_OUT/* ${DESTDIR}/part/disk1/ + +# unmount +sync +# This fails for some reason. It could work now because we are not using qemu-user +# fstrim $DESTDIR/part/disk1 +umount $DESTDIR/part/disk1 + +kpartx -d /dev/mapper/diskimage +dmsetup remove diskimage +losetup -d $_loop_dev -- cgit v1.2.3