build: -Ddiagnose — boot without the display so the transcript stays on screen
The display service claiming the framebuffer suppresses the on-screen boot transcript — correctly in normal operation, but on a serial-less machine being debugged, the timeline vanishes just when it matters. A diagnose image (zig build -Ddiagnose=true) has init skip the display service and demo: the timestamped transcript stays on screen indefinitely, and the power button still runs the orderly shutdown (so the logger's files land when storage works). First use immediately caught a real bug IN QEMU: an intermittent (~1 in 3) usb-storage READ CAPACITY failure after a ~21 s stall — after which usb-storage and fat both exit cleanly and nothing retries: one transient early-boot USB failure leaves the system permanently without storage (and therefore without logs). That no-retry policy is a prime suspect for real hardware never mounting /var, and is Track B's first work item.
This commit is contained in:
@@ -27,7 +27,15 @@ const build_options = @import("build_options");
|
||||
/// kernel. Drivers are absent on purpose: the device manager owns those. (A
|
||||
/// future init reads this from a manifest under /system/services instead of a
|
||||
/// hardcoded list.)
|
||||
const boot_services = [_][]const u8{
|
||||
const boot_services = if (build_options.diagnose) [_][]const u8{
|
||||
// The diagnose boot: no display service, so the kernel's on-screen boot
|
||||
// transcript is never suppressed — the timestamped timeline (USB bring-up,
|
||||
// storage, logger) stays readable on real hardware with no serial.
|
||||
"/system/services/input",
|
||||
"/system/services/device-manager",
|
||||
"/system/services/fat",
|
||||
"/system/services/logger",
|
||||
} else [_][]const u8{
|
||||
"/system/services/input",
|
||||
"/system/services/device-manager",
|
||||
"/system/services/fat",
|
||||
|
||||
Reference in New Issue
Block a user