47 lines
1.2 KiB
Bash
Executable File
47 lines
1.2 KiB
Bash
Executable File
#!/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!"
|