diff options
| author | salmonik <salmonik@tuta.io> | 2026-08-02 15:34:45 +0200 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-08-02 15:34:45 +0200 |
| commit | c6827451bce4cd3774a9e066a4a1bf51bb83592e (patch) | |
| tree | f43105d688e78efbcd2f9241330bead61739af2f | |
| parent | v0.5.5: crash reports go to a dedicated CRASHLOG USB stick (diff) | |
| download | rs-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.rs | 17 | ||||
| -rwxr-xr-x | scripts/test-fault.sh | 4 |
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" | |||
| 93 | echo "==> 6/6 crash.log persisted on the CRASHLOG stick" | 93 | echo "==> 6/6 crash.log persisted on the CRASHLOG stick" |
| 94 | grep -aq "crashlog: vol .* (CRASHLOG)" "$LOG" || fail "crashlog did not target the CRASHLOG stick" | 94 | grep -aq "crashlog: vol .* (CRASHLOG)" "$LOG" || fail "crashlog did not target the CRASHLOG stick" |
| 95 | grep -aq "crashlog: wrote" "$LOG" || fail "crashlog write did not complete" | 95 | grep -aq "crashlog: wrote" "$LOG" || fail "crashlog write did not complete" |
| 96 | mdir -i "$CRASH_IMG" "::" 2>/dev/null | grep -aqi "crash" \ | 96 | mdir -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. |
| 99 | if [ -f "$ESP_DIR/crash.log" ]; then | 99 | if [ -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" |
