Files
k-os/scripts/make-disk-image.sh
Gabriel Kaszewski 924baede9e fix(adapter-riscv): fix VirtIO block driver — scan all MMIO slots, handle legacy mode, fix virtqueue layout
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.
2026-10-18 04:42:13 +02:00

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} ==="