Files
fds-os/docs/m5-validation.md
T
2026-09-21 22:29:23 +08:00

4.1 KiB

M5 software validation

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 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.