97 lines
4.6 KiB
Markdown
97 lines
4.6 KiB
Markdown
# M4 software boot 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.
|
|
|
|
|
|
Validated on the x86_64 Arch workstation on 2026-09-21 (Asia/Shanghai).
|
|
Physical Pi testing is deferred by the user. This report establishes the
|
|
software boot machinery, not the physical NVMe/RP1/display path or performance
|
|
targets. M5 supplies the ordinary-user FDS console and timing instrumentation.
|
|
|
|
## Verified path
|
|
|
|
The cross-built Pi 5 kernel loaded the actual Rust-only initramfs, discovered
|
|
GPT partition identity, mounted EROFS read-only, transferred proc/sys/dev mounts,
|
|
stopped and reaped the early Dasung controller, and executed native s6. Guest
|
|
checks confirmed 16 KiB pages, s6-svscan as PID 1, the static packaged FDS CLI,
|
|
matching module release, loading/unloading the `dummy` kernel module, and one
|
|
base Dasung process. Ownership, ping capabilities, volatile filesystems and
|
|
start/restart/stop of the test service also passed.
|
|
|
|
The final VM matrix, `out/m4-vm.flkV6j/`, passed nine cases:
|
|
|
|
1. Uncompressed initramfs.
|
|
2. Gzip initramfs.
|
|
3. Legacy-LZ4 initramfs.
|
|
4. Zstandard initramfs.
|
|
5. No SYSTEM at startup, followed by virtual USB insertion and automatic boot.
|
|
6. Two SYSTEMs refused, followed by explicit console recovery.
|
|
7. Recovery selected by kernel option while SYSTEM is also present.
|
|
8. Invalid SYSTEM filesystem refused, with recovery still usable.
|
|
9. Foreign OS root refused, with recovery still usable.
|
|
|
|
Each case reached the guest checks and orderly power-off. Input image hashes
|
|
were unchanged. The test uses QEMU 11.1.1, `virt`, `max` CPU, TCG, 1 GiB RAM and
|
|
two virtual CPUs, without networking or host-device passthrough. Its recovery
|
|
disk is a selection fixture, not the independent M12 recovery product.
|
|
|
|
The FAT32 boot builder produced a 512 MiB `FDS_BOOT` partition, checked it with
|
|
`fsck.fat`, extracted it with mtools and compared every file hash. Two consecutive
|
|
builds matched byte-for-byte. Two full kernel builds also produced identical
|
|
kernel Image, Pi 5 DTB and XBPS package hashes. These narrow reproducibility
|
|
results do not establish a complete offline release rebuild.
|
|
|
|
## Commands and artifacts
|
|
|
|
The completed sequence included `make kernel`, `make tooling`, `make tooling-test`,
|
|
`make rootfs PROFILE=cli`, initramfs construction, and these final regression gates:
|
|
|
|
```text
|
|
make bootstrap
|
|
make smoke-test
|
|
make check
|
|
make rootfs-test
|
|
make init-test
|
|
make system-card
|
|
make boot-volume
|
|
make boot-test
|
|
make dasung-test
|
|
```
|
|
|
|
Final logs are `out/logs/m4-final-*.log`; rootfs construction is recorded in
|
|
`out/logs/m4-rootfs.log`. The configured rootfs is `out/rootfs-build.p0HSQv/`:
|
|
111 packages, 1,168 inspected ARM ELF files, and a 407,009,280-byte tar.
|
|
|
|
| Artifact | SHA-256 |
|
|
| --- | --- |
|
|
| Rootfs tar | `ba06bdcb8f4fc537c8cb4ce9d31404d3cd1d14f01b41cb597a53ec48f0ba6710` |
|
|
| SYSTEM GPT image | `d15af6feccbaeba77920e0b5ee13076dbdc80a076c973068a1f68e86bb599bf1` |
|
|
| Pi kernel Image | `78f027ad3124da7b06d4559f49ea7f63c312cd24e653d0f8e29ee2391f520bc4` |
|
|
| Kernel XBPS package | `6c361df5bf31ef517b6bad7e44220a8126f7c2fac341379e8c1d6b39fcbe8c20` |
|
|
| Uncompressed initramfs | `bc8905c5ca40fe827a44f7dd73f88aa1c99a3b84fa474535ccb36a212682b514` |
|
|
| Production FAT boot partition | `940b7d62ba5923a3f92db6939aca1534f0f2061376c1fec7604a50e6d3b3f0b8` |
|
|
|
|
The kernel is 6.12.87-fds1, built from Raspberry Pi commit
|
|
`ae4d75fb36deba0fe1a986d9bfae65755e082dd0` with the FDS configuration delta.
|
|
Void remains pinned to `02a3cbc132c3c4a3a9d59e9b98f517af5dd11cd1` with no tracked
|
|
upstream changes. Firmware package/version/hash are pinned in
|
|
`config/pi-firmware.conf`. Detailed package inventories and source inputs remain
|
|
beside each versioned build.
|
|
|
|
## Findings and limits
|
|
|
|
The original Cortex-A72 VM CPU did not support the retained 16 KiB kernel page
|
|
configuration; `max` successfully runs the Pi kernel. A repeated VM test exposed
|
|
getty's shutdown hangup discarding pending serial output. The checker now stops
|
|
getty after verifying it and reopens the console before final service checks;
|
|
no boot delay was added.
|
|
|
|
The M0 host-PATH QEMU execution remains an optional skip. Actual ARM userspace
|
|
and full-system VM execution passed using project-local emulators. Physical
|
|
Pi firmware boot, EEPROM changes, NVMe/RP1, monitor EDID acceptance, image quality,
|
|
cold-power display recovery, bay wiring/power and real boot/shutdown timings
|
|
remain explicitly untested.
|
|
|
|
Use the [boot guide](boot.md) to reproduce these artifacts and understand the
|
|
distinction between a boot partition, SYSTEM cartridge and complete internal disk.
|