VirtIO now properly scans 8 MMIO slots, detects legacy vs modern mode, uses correct virtqueue page alignment for legacy, and reads sectors. Fixed disk image script to force FAT16 (mformat was creating FAT32). init.elf successfully loaded from FAT16 disk via VirtIO on QEMU.
51 lines
1.4 KiB
Bash
Executable File
51 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
IMG="boot.img"
|
|
IMG_SIZE_KB=4096
|
|
TARGET="riscv64gc-unknown-none-elf"
|
|
BUILD_DIR="target/${TARGET}/release"
|
|
|
|
echo "=== Creating k-os boot disk image ==="
|
|
|
|
# Create and format FAT16 image (mtools required: brew install mtools)
|
|
dd if=/dev/zero of="${IMG}" bs=1K count=${IMG_SIZE_KB} 2>/dev/null
|
|
mformat -i "${IMG}" -t 8 -h 2 -s 32 -r 16 -c 1 -M 512 ::
|
|
echo "Created and formatted ${IMG} (${IMG_SIZE_KB}KB, FAT16)"
|
|
|
|
# Create directories
|
|
mmd -i "${IMG}" ::servers 2>/dev/null || true
|
|
mmd -i "${IMG}" ::apps 2>/dev/null || true
|
|
|
|
# Copy init
|
|
if [ -f "${BUILD_DIR}/init" ]; then
|
|
mcopy -i "${IMG}" "${BUILD_DIR}/init" "::init.elf"
|
|
echo " Copied init.elf ($(stat -f%z "${BUILD_DIR}/init" 2>/dev/null || stat -c%s "${BUILD_DIR}/init") bytes)"
|
|
fi
|
|
|
|
# Copy server binaries
|
|
for server in display-server input-server log-server permission-manager storage-server session-server; do
|
|
if [ -f "${BUILD_DIR}/${server}" ]; then
|
|
mcopy -i "${IMG}" "${BUILD_DIR}/${server}" "::servers/${server}.elf"
|
|
echo " Copied servers/${server}.elf"
|
|
fi
|
|
done
|
|
|
|
# Copy app binaries
|
|
for app in snake; do
|
|
if [ -f "${BUILD_DIR}/${app}" ]; then
|
|
mcopy -i "${IMG}" "${BUILD_DIR}/${app}" "::apps/${app}.elf"
|
|
echo " Copied apps/${app}.elf"
|
|
fi
|
|
done
|
|
|
|
# List contents
|
|
echo ""
|
|
echo "Disk contents:"
|
|
mdir -i "${IMG}" ::
|
|
mdir -i "${IMG}" ::servers 2>/dev/null || true
|
|
mdir -i "${IMG}" ::apps 2>/dev/null || true
|
|
|
|
echo ""
|
|
echo "=== Done: ${IMG} ==="
|