summaryrefslogtreecommitdiffstats
path: root/board/pc/post-image-efi-gpt.sh
blob: d2acd8f8526cbe661708e484260f148e6093c892 (plain)
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
#!/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 ))

cat > efi-part/EFI/BOOT/grub.cfg <<EOF
set default="0"
set timeout="5"

menuentry "Buildroot" {
	linux /bzImage root=PARTUUID=$root_part_uuid rootwait console=tty1
}
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 efi-part/EFI ::EFI
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
OpenPOWER on IntegriCloud