#!/bin/bash set -e # Image configuration IMAGE_NAME="disk.img" IMAGE_SIZE_MB=64 ESP_SIZE_MB=32 # EFI System Partition size # Create a new disk image dd if=/dev/zero of=$IMAGE_NAME bs=1M count=$IMAGE_SIZE_MB # Create partition table and ESP partition parted $IMAGE_NAME mklabel gpt parted $IMAGE_NAME mkpart ESP fat32 1MiB ${ESP_SIZE_MB}MiB parted $IMAGE_NAME set 1 esp on # Calculate offset for mounting SECTOR_SIZE=512 START_SECTOR=$(parted $IMAGE_NAME -ms unit s print | grep "^1:" | cut -d: -f2 | tr -d 's') OFFSET=$((START_SECTOR * SECTOR_SIZE)) # Create FAT32 filesystem LOOP_DEVICE=$(sudo losetup -f --show -o $OFFSET $IMAGE_NAME) sudo mkfs.fat -F 32 $LOOP_DEVICE # Mount the image MOUNT_POINT="/tmp/esp" mkdir -p $MOUNT_POINT sudo mount $LOOP_DEVICE $MOUNT_POINT # Create EFI directory structure sudo mkdir -p $MOUNT_POINT/EFI/BOOT # Copy kernel to the ESP # For UEFI boot, rename it to BOOTX64.EFI sudo cp target/x86_64-custom/release/kernel $MOUNT_POINT/EFI/BOOT/BOOTX64.EFI # For BIOS boot, also copy it to the root sudo cp target/x86_64-custom/release/kernel $MOUNT_POINT/ # Cleanup sudo umount $MOUNT_POINT sudo losetup -d $LOOP_DEVICE rm -rf $MOUNT_POINT echo "Disk image created successfully!"