Files
Foundry-Boot/examples and stuff/some scripts/create_image.sh
T
2025-02-25 01:14:52 +00:00

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!"