From 83334cb46f749091c66fa426b6e6c0b758ac208a Mon Sep 17 00:00:00 2001 From: Rajiv Ranganath Date: Tue, 2 Jul 2019 02:20:19 +0000 Subject: Import a script to generate SD images. Signed-off-by: Rajiv Ranganath --- Dockerfile.image | 29 ++++++++------- README.md | 2 +- disk_image | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+), 13 deletions(-) create mode 100755 disk_image diff --git a/Dockerfile.image b/Dockerfile.image index 03f11ed..489275b 100644 --- a/Dockerfile.image +++ b/Dockerfile.image @@ -1,9 +1,9 @@ -FROM zynqmp-dt-config-package AS zynqmp-dt-config-package -FROM zynqmp-xen-package AS zynqmp-xen-package -FROM zynqmp-dom0-kernel-package AS zynqmp-dom0-kernel-package -FROM zynqmp-dom0-ramdisk-package AS zynqmp-dom0-ramdisk-package -FROM zynqmp-dom1-package AS zynqmp-dom1-package -FROM zynqmp-dom2-package AS zynqmp-dom2-package +# FROM zynqmp-dt-config-package AS zynqmp-dt-config-package +# FROM zynqmp-xen-package AS zynqmp-xen-package +# FROM zynqmp-dom0-kernel-package AS zynqmp-dom0-kernel-package +# FROM zynqmp-dom0-ramdisk-package AS zynqmp-dom0-ramdisk-package +# FROM zynqmp-dom1-package AS zynqmp-dom1-package +# FROM zynqmp-dom2-package AS zynqmp-dom2-package FROM alpine:3.9 @@ -19,8 +19,13 @@ RUN \ apk add \ bash \ coreutils \ + device-mapper \ dtc \ + e2fsprogs \ file \ + multipath-tools \ + sgdisk \ + util-linux \ vim && \ \ # add uboot-tools from community/edge repo @@ -36,9 +41,9 @@ RUN \ rm -rf /tmp/* && \ rm -f /var/cache/apk/* -COPY --from=zynqmp-dom0-kernel-package /home/builder/output-zynqmp-dom0-kernel/ /home/builder/output -COPY --from=zynqmp-dom0-ramdisk-package /home/builder/output-zynqmp-dom0-ramdisk/ /home/builder/output -COPY --from=zynqmp-dt-config-package /home/builder/output-zynqmp-dt-config/ /home/builder/output/ -COPY --from=zynqmp-xen-package /home/builder/output-zynqmp-xen/ /home/builder/output -COPY --from=zynqmp-dom1-package /home/builder/output-zynqmp-dom1/ /home/builder/output/zynqmp-dom1/ -COPY --from=zynqmp-dom2-package /home/builder/output-zynqmp-dom2/ /home/builder/output/zynqmp-dom2/ +# COPY --from=zynqmp-dom0-kernel-package /home/builder/output-zynqmp-dom0-kernel/ /home/builder/output +# COPY --from=zynqmp-dom0-ramdisk-package /home/builder/output-zynqmp-dom0-ramdisk/ /home/builder/output +# COPY --from=zynqmp-dt-config-package /home/builder/output-zynqmp-dt-config/ /home/builder/output/ +# COPY --from=zynqmp-xen-package /home/builder/output-zynqmp-xen/ /home/builder/output +# COPY --from=zynqmp-dom1-package /home/builder/output-zynqmp-dom1/ /home/builder/output/zynqmp-dom1/ +# COPY --from=zynqmp-dom2-package /home/builder/output-zynqmp-dom2/ /home/builder/output/zynqmp-dom2/ diff --git a/README.md b/README.md index 4fa45e7..becc052 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ $ docker build --force-rm --file Dockerfile.image -t imagebuilder . ## `/imagebuilder_run` ``` -$ docker run --rm -ti -v /tmp:/tmp imagebuilder /imagebuilder_run +$ docker run --rm --privileged=true -ti -v /tmp:/tmp -v /dev:/dev imagebuilder /imagebuilder_run ``` The generated files are in `/tmp/output` diff --git a/disk_image b/disk_image new file mode 100755 index 0000000..3cb0394 --- /dev/null +++ b/disk_image @@ -0,0 +1,107 @@ +#!/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)" + +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 + +# +# ** TODO ** +# +# # create mount point and mount vos_a +# mkdir -p ${DESTDIR}/part/vos_a +# mount -t ext4 /dev/mapper/diskimage2 $DESTDIR/part/vos_a +# +# # Extract rootfs cpio archive into `.../part/vos_a` +# $(cd ${DESTDIR}/part/vos_a; cpio -idm < ${DESTDIR}/output-dom0-builder/rootfs.cpio) +# +# # copy over files needed in `/boot` +# mkdir ${DESTDIR}/part/vos_a/boot +# # linux +# cp ${DESTDIR}/output-dom0-builder/initramfs-${_fullkver} ${DESTDIR}/part/vos_a/boot +# cp ${DESTDIR}/output-dom0-builder/modloop-${_fullkver} ${DESTDIR}/part/vos_a/boot +# cp ${DESTDIR}/output-dom0-builder/vmlinuz-${_fullkver} ${DESTDIR}/part/vos_a/boot +# # xen +# cp ${DESTDIR}/viryaos-xen/boot/xen-${_fullxenver} ${DESTDIR}/part/vos_a/boot +# # dtb +# cp ${DESTDIR}/viryaos.dtb ${DESTDIR}/part/vos_a/boot +# +# # unmount +# sync +# +# # This fails for some reason. It could work now because we are not using qemu-user +# # fstrim $DESTDIR/part/vos_a +# +# umount $DESTDIR/part/vos_a + +kpartx -d /dev/mapper/diskimage +dmsetup remove diskimage +losetup -d $_loop_dev -- cgit v1.2.3