-
Notifications
You must be signed in to change notification settings - Fork 0
/
post-image-efi-gpt.sh
executable file
·57 lines (43 loc) · 1.62 KB
/
post-image-efi-gpt.sh
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
#!/bin/sh
set -e
cd ${BINARIES_DIR}
# GPT partition type UUIDs
esp_type=c12a7328-f81f-11d2-ba4b-00a0c93ec93b
linux_type=44479540-f297-41b2-9af7-d131d5f0458a
# Partition UUIDs
efi_part_uuid=$(uuidgen)
root_part_uuid=$(uuidgen)
# Boot partition offset and size, in 512-byte sectors
efi_part_start=64
efi_part_size=32768
# Rootfs partition offset and size, in 512-byte sectors
root_part_start=$(( efi_part_start + efi_part_size ))
root_part_size=$(( $(stat -c %s rootfs.ext2) / 512 ))
first_lba=34
last_lba=$(( root_part_start + root_part_size ))
# Disk image size in 512-byte sectors
image_size=$(( last_lba + first_lba ))
mkdir -p efi-part
cat > efi-part/startup.nsh <<EOF
bzImage root=PARTUUID=$root_part_uuid rootwait console=ttyS0,115200n8
EOF
# Create EFI system partition
rm -f efi-part.vfat
dd if=/dev/zero of=efi-part.vfat bs=512 count=0 seek=$efi_part_size
mkdosfs efi-part.vfat
mcopy -bsp -i efi-part.vfat efi-part/startup.nsh ::startup.nsh
mcopy -bsp -i efi-part.vfat bzImage ::bzImage
rm -f disk.img
dd if=/dev/zero of=disk.img bs=512 count=0 seek=$image_size
sfdisk disk.img <<EOF
label: gpt
label-id: $(uuidgen)
device: /dev/foobar0
unit: sectors
first-lba: $first_lba
last-lba: $last_lba
/dev/foobar0p1 : start=$efi_part_start, size=$efi_part_size, type=$esp_type, uuid=$efi_part_uuid, name="efi-part.vfat"
/dev/foobar0p2 : start=$root_part_start, size=$root_part_size, type=$linux_type, uuid=$root_part_uuid, name="rootfs.ext2"
EOF
dd if=efi-part.vfat of=disk.img bs=512 count=$efi_part_size seek=$efi_part_start conv=notrunc
dd if=rootfs.ext2 of=disk.img bs=512 count=$root_part_size seek=$root_part_start conv=notrunc