From dc23d2f22cafeb6b97ba460789a834a6c586314d Mon Sep 17 00:00:00 2001 From: salmonik Date: Fri, 31 Jul 2026 19:53:53 +0200 Subject: ahci: SATA driver + FAT32 persistent disk mounted at /disk - ahci.rs: polling AHCI on PCI class 1/6/1, bus mastering + ABAR map, port 0 up, IDENTIFY + READ/WRITE DMA EXT through one 4KiB DMA buffer - fat.rs: BPB parse, whole-FAT RAM cache with write-back to both copies, LFN read/write, dirs, multi-cluster files, FSInfo free-count sync, space-padded dot entries ('..' = cluster 0 under root), fsck-clean - fs.rs: /disk mount node + 24-slot ephemeral node pool; ls/cat/hexdump/ echo/mkdir/touch/rm/edit all work on disk paths unchanged - QEMU: explicit bus assignment (disk=ide.0, ESP=ide.1); the implicit fat:rw:esp drive was stealing AHCI port 0 - Debugged against QEMU source: header DW0 is CFL in bits 4:0 / PRDTL in bits 31:16 (Linux libahci layout), FIS count at bytes 12-13, device at byte 7; QEMU rejects H2D FIS flags bits 6:4, so direction is the header W bit only - Verified: full shell round-trip on /disk, reboot persistence (poweroff then mdir/mtype and a fresh boot), fsck.fat clean --- scripts/qemu.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'scripts/qemu.sh') diff --git a/scripts/qemu.sh b/scripts/qemu.sh index b75bed4..123d9d0 100755 --- a/scripts/qemu.sh +++ b/scripts/qemu.sh @@ -40,7 +40,10 @@ while [ $# -gt 0 ]; do ;; --image | -i) _img_file="$(printf -- '-drive file=%s,format=raw,if=none,id=hd' "$2")" - DRIVE_ARGS=("$_img_file" '-device' 'ide-hd,drive=hd') + # Explicit buses: data disk -> ide.0 (port 0), ESP -> ide.1. + DRIVE_ARGS=("$_img_file" '-device' 'ide-hd,drive=hd,bus=ide.0' \ + '-drive' 'file=fat:rw:esp,format=raw,if=none,id=esp' \ + '-device' 'ide-hd,drive=esp,bus=ide.1') shift 2 ;; --bios | -b) -- cgit v1.2.3