63 lines
1.7 KiB
Bash
63 lines
1.7 KiB
Bash
|
#!/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
|