Files
fds-os/docs/developer/m5-validation.md
T
2026-09-22 13:23:34 +08:00

73 lines
4.3 KiB
Markdown

# M5 software validation
Development reference and historical context. For current operating instructions, use the [user manual](../README.md). Acceptance applies only to the source and artifacts identified in each record.
M5's ordinary-user console and software timing tools passed on the x86_64 Arch
build host using the actual AArch64 kernel, initramfs and SYSTEM image in QEMU
11.1.1. Physical Pi boot, power-on, display and timing acceptance is deferred.
These runs completed on 2026-09-20 UTC (2026-09-21 in Asia/Shanghai).
## Usable console and event evidence
`make console-test` passed in `out/m5-vm.fuml66z0/`:
- Native s6 starts the local autologin console as `fds`, UID/GID 1000. Commands
execute at `FDS>`, HOME and working directory are `/home/fds`, the temporary
home accepts writes, and SYSTEM rejects writes.
- Reports contain stage0 entry, SYSTEM discovery, root mount, root switch,
s6 stage-2 entry and first-console readiness for the current boot. Desktop
readiness is absent. No missing event is replaced with a zero timestamp.
- Exiting and restarting the console preserves the first readiness event.
- Holding eudev startup behind a test FIFO does not prevent the usable prompt.
The test releases that gate after executing a console command.
- Saved-report comparison rejects an unexplained regression greater than
100 ms, permits an explicit explanation, and rejects incompatible platforms.
The normal run measured 1,669.027 ms kernel-clock-to-console and 664.032 ms
s6-stage-2-to-console. The blocked-eudev run measured 1,659.990 ms and
581.113 ms. These are individual emulator observations, not physical budgets.
Nine further boots compare Rust optimization levels in
`out/rust-profiles.x_wgx1kp/`; see [Performance](performance.md) for the table,
raw report locations, clock boundaries and decision to retain `opt-level=z`.
`make console-vm` was also opened interactively and verified UID 1000.
## Build execution correction
PRoot intermittently aborted during ARM subprocess execution on this host. One
failure also returned a misleading zero status. Runtime checks now require an
explicit final child acknowledgement, and finalization propagates failures.
The image builder now uses a private user-namespace `binfmt_misc` registration
with static QEMU, requiring Linux 6.7 or newer. It leaves the workstation's
registration table unchanged. The existing Void `util-linux` package provides
mount and capability-drop helpers; no target package was added for emulation.
`tests/integration/rootfs-emulation.py` verified nested ARM execution, exact
nonzero exit propagation, isolation from the host registry and removal of
setup capabilities before target execution. Only namespace-local SETFCAP remains
for package configuration. A fresh complete rootfs build passed afterward.
Historical M1/M2 reports retain the older PRoot workflow as historical evidence.
## Final artifacts
| Artifact | SHA-256 |
| --- | --- |
| Rootfs TAR, `out/rootfs-build.9kTEAH/` | `eef5764034d315b5e012679ef7ed165c6961b69aa88f9514c77cf08ef67bf8f7` |
| SYSTEM GPT/EROFS, `out/system-build.o948uzwd/` | `d2e00f56f1ecc689de455a9066259cefa95bd0bbd271e7f2d3d4cd3235dffd91` |
| Uncompressed initramfs, `out/initramfs-build.dzggpetk/` | `2a6009800f4c73707b165a3a3142b5baff688c685b7ea9fcd196e9ab6079a4de` |
| Production FAT32 boot partition, `out/boot-build.bzakcn8s/` | `cd242813ded7c860d291c1dbf984bf69b48cc3b58da93f9bdebf83068139abf1` |
| Kernel Image, unchanged from M4 | `78f027ad3124da7b06d4559f49ea7f63c312cd24e653d0f8e29ee2391f520bc4` |
The rootfs contains 111 packages and 1,169 AArch64 ELF files. Its TAR is
407,480,320 bytes. Per-build package/input inventories accompany the image.
The boot FAT is a partition image, not a complete internal NVMe disk.
The final sequential regression run exited zero: `make bootstrap`,
`make smoke-test`, `make tooling-test`, `make check`, `make rootfs-test`,
`make init-test`, `make system-card`, `make boot-volume`, `make boot-test`,
`make console-test`, and `make performance-test`. Logs are
`out/logs/m5-verified-*.log`. The native-init VM is `out/m2-vm.sYk3Hu/`;
the nine-case stage0 matrix is `out/m4-vm.RHUJX5/`. Shared Rust tests passed.
M0 still reports its optional host-PATH QEMU skip; project-local ARM execution
and full-system emulation actually ran. No physical boot benchmark is claimed.