Add disk driver
This commit is contained in:
@@ -1,3 +1,69 @@
|
||||
./scripts/build.sh
|
||||
|
||||
qemu-system-i386 -serial stdio -kernel "build/out/kernel"
|
||||
# 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
|
||||
Reference in New Issue
Block a user