summaryrefslogtreecommitdiffstats
path: root/rsnix
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-08-01 01:56:12 +0200
committersalmonik <salmonik@tuta.io>2026-08-01 01:56:12 +0200
commit4ea992c71dd0cdcffe0f74216e748256bd700a31 (patch)
tree2992b0063f08fbf79586d35ad481539fd7ee9af4 /rsnix
parentahci: skip ATAPI ports and fast-fail on device abort (diff)
downloadrs-dos-4ea992c71dd0cdcffe0f74216e748256bd700a31.tar.gz
rs-dos-4ea992c71dd0cdcffe0f74216e748256bd700a31.zip
scripts: automate the data-disk workflow (mkdisk / sendkeys / test-disk)
- scripts/mkdisk.sh: create the FAT32 disk with mkfs.fat -C (the flag that actually creates the file — plain mkfs.fat fails on a missing path), accept M/G/K sizes, seed seed/ files via mtools; --fresh re-formats, --no-seed skips seeding - scripts/sendkeys.py: type lines into the guest via the QEMU monitor (US layout). Punctuation must use QEMU's named keys (minus, slash, dot, ...) — bare '-', '.', '/' are not valid sendkey names, and '-' is the modifier separator, so they were silently dropped before - scripts/test-disk.sh: full automated round trip — build, deploy, ensure image, boot headless QEMU, drive the shell (ls /disk, mkdir, echo >, cat, poweroff), then verify with fsck.fat (must be clean) and mtype (file content must have survived poweroff) - Makefile: make disk / disk-fresh / inspect / test-disk; run, run-gui and debug now auto-create a missing DISK_IMG; fix the stale comment (mkfs.fat without -C) - scripts/boot.sh: auto-create a missing DISK_IMG via mkdisk.sh - seed/: motd.txt + lines.txt seeded onto fresh images - Verified end to end: ./scripts/test-disk.sh --fresh passes
Diffstat (limited to 'rsnix')
-rw-r--r--rsnix/src/ahci.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/rsnix/src/ahci.rs b/rsnix/src/ahci.rs
index 2efe3b4..427345d 100644
--- a/rsnix/src/ahci.rs
+++ b/rsnix/src/ahci.rs
@@ -182,7 +182,10 @@ fn start_port(abar: usize, port_idx: u32) -> Option<Disk> {
182 }; 182 };
183 // IDENTIFY DEVICE as a sanity check + to learn the capacity. 183 // IDENTIFY DEVICE as a sanity check + to learn the capacity.
184 if issue(&d, ATA_IDENTIFY, 0, 1, false).is_err() { 184 if issue(&d, ATA_IDENTIFY, 0, 1, false).is_err() {
185 crate::serial_println!("ahci: IDENTIFY failed on port {} (not an ATA disk?)", port_idx); 185 crate::serial_println!(
186 "ahci: IDENTIFY failed on port {} (not an ATA disk?)",
187 port_idx
188 );
186 return None; 189 return None;
187 } 190 }
188 let id = unsafe { core::slice::from_raw_parts(d.buf as *const u16, 256) }; 191 let id = unsafe { core::slice::from_raw_parts(d.buf as *const u16, 256) };