blob: 2d70ad35ebb54c730975af148b30f0b64aca80f1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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
|