summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-08-02 15:34:45 +0200
committersalmonik <salmonik@tuta.io>2026-08-02 15:34:45 +0200
commitc6827451bce4cd3774a9e066a4a1bf51bb83592e (patch)
treef43105d688e78efbcd2f9241330bead61739af2f
parentv0.5.5: crash reports go to a dedicated CRASHLOG USB stick (diff)
downloadrs-dos-c6827451bce4cd3774a9e066a4a1bf51bb83592e.tar.gz
rs-dos-c6827451bce4cd3774a9e066a4a1bf51bb83592e.zip
v0.5.5: on-screen boot markers for disk/fs stage
Real hardware has no serial console, and the ahci/fat/fs boot diagnostics were serial-only — a silent fs failure left the user with no way to see where boot stopped. Add boot_marker lines for the AHCI disk count, FAT volume count, and the VFS tree + fs self-test result.
-rw-r--r--rsdos/src/main.rs17
-rwxr-xr-xscripts/test-fault.sh4
2 files changed, 18 insertions, 3 deletions
diff --git a/rsdos/src/main.rs b/rsdos/src/main.rs
index 4521a42..4fe89c9 100644
--- a/rsdos/src/main.rs
+++ b/rsdos/src/main.rs
@@ -298,15 +298,30 @@ pub unsafe extern "efiapi" fn efi_main(image_handle: Handle, system_table: *mut
298 if !rsnix::ahci::init() { 298 if !rsnix::ahci::init() {
299 rsnix::serial_println!("ahci: no disk attached"); 299 rsnix::serial_println!("ahci: no disk attached");
300 } 300 }
301 rsnix::gop::boot_marker(&alloc::format!(
302 "rsnix: ahci {} disk(s)",
303 rsnix::ahci::disk_count()
304 ));
301 rsnix::fat::init(); // prints one line per mounted volume 305 rsnix::fat::init(); // prints one line per mounted volume
306 rsnix::gop::boot_marker(&alloc::format!(
307 "rsnix: fat {} volume(s) mounted",
308 rsnix::fat::volume_count()
309 ));
302 310
303 let (dirs, files) = rsnix::fs::init(); 311 let (dirs, files) = rsnix::fs::init();
304 rsnix::serial_println!("fs: vfs ready — {} dirs, {} files", dirs, files); 312 rsnix::serial_println!("fs: vfs ready — {} dirs, {} files", dirs, files);
305 if rsnix::fs::self_test() { 313 let fstest = rsnix::fs::self_test();
314 if fstest {
306 rsnix::serial_println!("fs: self-test OK (create/read/write/remove)"); 315 rsnix::serial_println!("fs: self-test OK (create/read/write/remove)");
307 } else { 316 } else {
308 rsnix::serial_println!("fs: self-test FAILED"); 317 rsnix::serial_println!("fs: self-test FAILED");
309 } 318 }
319 rsnix::gop::boot_marker(&alloc::format!(
320 "rsnix: fs ok {} dirs/{} files self-test {}",
321 dirs,
322 files,
323 if fstest { "ok" } else { "FAILED" }
324 ));
310 325
311 rsnix::serial_println!("boot: entering shell"); 326 rsnix::serial_println!("boot: entering shell");
312 rsnix::gop::boot_marker("rsnix: boot done — shell"); 327 rsnix::gop::boot_marker("rsnix: boot done — shell");
diff --git a/scripts/test-fault.sh b/scripts/test-fault.sh
index 59f741f..74d83eb 100755
--- a/scripts/test-fault.sh
+++ b/scripts/test-fault.sh
@@ -93,8 +93,8 @@ grep -aq "!!! halting" "$LOG" || fail "no halt message"
93echo "==> 6/6 crash.log persisted on the CRASHLOG stick" 93echo "==> 6/6 crash.log persisted on the CRASHLOG stick"
94grep -aq "crashlog: vol .* (CRASHLOG)" "$LOG" || fail "crashlog did not target the CRASHLOG stick" 94grep -aq "crashlog: vol .* (CRASHLOG)" "$LOG" || fail "crashlog did not target the CRASHLOG stick"
95grep -aq "crashlog: wrote" "$LOG" || fail "crashlog write did not complete" 95grep -aq "crashlog: wrote" "$LOG" || fail "crashlog write did not complete"
96mdir -i "$CRASH_IMG" "::" 2>/dev/null | grep -aqi "crash" \ 96mdir -i "$CRASH_IMG" "::" 2>/dev/null | grep -aqi "crash" ||
97 || fail "crash.log missing on the CRASHLOG stick" 97 fail "crash.log missing on the CRASHLOG stick"
98# The boot ESP must NOT receive the crash log. 98# The boot ESP must NOT receive the crash log.
99if [ -f "$ESP_DIR/crash.log" ]; then 99if [ -f "$ESP_DIR/crash.log" ]; then
100 fail "crash.log landed on the boot ESP instead of the CRASHLOG stick" 100 fail "crash.log landed on the boot ESP instead of the CRASHLOG stick"