diff options
Diffstat (limited to 'board/pc/post-image-efi-gpt.sh')
-rwxr-xr-x | board/pc/post-image-efi-gpt.sh | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/board/pc/post-image-efi-gpt.sh b/board/pc/post-image-efi-gpt.sh new file mode 100755 index 0000000000..d2acd8f852 --- /dev/null +++ b/board/pc/post-image-efi-gpt.sh @@ -0,0 +1,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 |