69 lines
2.3 KiB
Bash
Executable File
69 lines
2.3 KiB
Bash
Executable File
./scripts/build.sh
|
|
|
|
# Create disk image if it doesn't exist
|
|
if [ ! -f hdd.img ]; then
|
|
echo "Creating disk image..."
|
|
qemu-img create -f raw hdd.img 10M
|
|
|
|
# Create a proper MBR partition table with one FAT32 partition
|
|
# Using fdisk commands
|
|
(
|
|
echo o # Create new DOS partition table
|
|
echo n # New partition
|
|
echo p # Primary partition
|
|
echo 1 # Partition number 1
|
|
echo # Default first sector
|
|
echo # Default last sector (use all space)
|
|
echo t # Change partition type
|
|
echo c # FAT32 LBA
|
|
echo a # Make bootable
|
|
echo w # Write changes
|
|
) | fdisk hdd.img >/dev/null 2>&1
|
|
|
|
# Format the partition as FAT32
|
|
# First, get the partition offset using sfdisk
|
|
OFFSET=$(sfdisk -l hdd.img 2>/dev/null | grep 'hdd.img1' | awk '{print $2}')
|
|
|
|
# Check if OFFSET is empty or non-numeric and set default if needed
|
|
if [ -z "$OFFSET" ] || ! [[ "$OFFSET" =~ ^[0-9]+$ ]]; then
|
|
OFFSET=2048 # Default first sector for most partition tables
|
|
fi
|
|
|
|
# Create FAT32 filesystem on the partition
|
|
echo "Formatting partition as FAT32..."
|
|
mkfs.vfat -F 32 -n "TESTDISK" --offset $OFFSET hdd.img
|
|
|
|
echo "Disk image created with FAT32 partition"
|
|
fi
|
|
|
|
# Get the partition offset for file operations
|
|
OFFSET=$(sfdisk -l hdd.img 2>/dev/null | grep 'hdd.img1' | awk '{print $2}')
|
|
if [ -z "$OFFSET" ] || ! [[ "$OFFSET" =~ ^[0-9]+$ ]]; then
|
|
OFFSET=2048
|
|
fi
|
|
|
|
# Copy test-hdd contents into the disk image
|
|
if [ -d "test-hdd" ]; then
|
|
echo "Copying test-hdd contents to disk image..."
|
|
|
|
# Use mcopy to copy files to the FAT32 partition
|
|
MTOOLS_SKIP_CHECK=1 mcopy -i hdd.img@@$((OFFSET * 512)) -s test-hdd/* :: || {
|
|
echo "Warning: mcopy failed, retrying individual files..."
|
|
for file in test-hdd/*; do
|
|
if [ -f "$file" ]; then
|
|
MTOOLS_SKIP_CHECK=1 mcopy -i hdd.img@@$((OFFSET * 512)) "$file" :: && echo "Copied $(basename "$file")"
|
|
fi
|
|
done
|
|
}
|
|
fi
|
|
|
|
# Create CD-ROM image if it doesn't exist
|
|
if [ ! -f cdrom.iso ]; then
|
|
mkdir -p /tmp/cdrom_content
|
|
echo "Test CD-ROM" > /tmp/cdrom_content/readme.txt
|
|
genisoimage -o cdrom.iso -V "TESTCD" -r -J /tmp/cdrom_content 2>/dev/null || touch cdrom.iso
|
|
fi
|
|
|
|
qemu-system-i386 -serial stdio -kernel "build/out/kernel" \
|
|
-drive file=hdd.img,if=ide,format=raw,index=0,media=disk \
|
|
-drive file=cdrom.iso,if=ide,format=raw,index=1,media=cdrom |