Probes and Evidence
Relevant source files
- docs/probes/2026-07-30-armv8a-risk-gate.md
- docs/probes/2026-07-30-phase2-virt-pi5-boot.md
- docs/probes/2026-09-28-prebuilt-boot.md
- tools/probe-armv8a.sh
- renode/probes/stock-armv8a.resc
- renode/probes/minimal-virt-stub.dts
- TODO_NOW.md
docs/probes/ is a dated evidence log. Project rules in TODO_NOW.md: never fudge exit codes, never report PASS without a real artifact; an amber “FAIL with diagnostic” is normal and publishable, and only a HARD FAIL blocks.
Timeline
| Date | Probe | Branch | Outcome |
|---|---|---|---|
| 2026-07-30 | Phase 1 ARMv8-A risk gate | main | PASS: CPU viability |
| 2026-07-30 | Phase 2 virt-pi5 boot | main | MMU resolved; userspace blocked by rootfs allocation panic |
| 2026-09-28 | Prebuilt-image adapter verification | main | Adapters verified; Pi 5 and x86_64 guests fail; AArch64/RISC-V not validated |
| 2026-09-30 | Identified AArch64 virt build | branch only | Blocked at guest link (__kernel_end undefined) |
| 2026-09-30 | Virt linker fix + three boots | branch only | All three timed out (124) with empty UART |
| 2026-10-01 | Renode model audit | branch only | No RP1/RP2040/BCM2712 models; warnings cannot prove strict coverage |
| 2026-10-01 | RP1 PWM / GPIO / RIO / pad models | branch only | Native unit suites pass; no guest qualification |
Phase 1 risk gate (2026-07-30)
Goal: prove axiomOS reaches UART on a stock Renode ARMv8-A platform before any custom Pi modeling.
- Renode
1.16.1.16973, stockplatforms/cpus/cortex-a78.repl(UART0x09000000, GIC0x08000000, RAM0x40000000), DTBrenode/probes/minimal-virt-stub.dtbloaded at0x44000000, ELF entry0x40080000. tools/probe-armv8a.shruns 0.1 virtual seconds under a 90 s wall timeout and requires both exit 0 and the markerLogging initialized(Renode 1.16 can exit 0 after Monitor errors).- Result: marker at about 1.0 ms virtual time; continued through exception vectors, physical memory, page tables, and heap init. Not a userspace claim.
- Observations: early writes target the Pi UART
0x10_7d00_1000(absent on that platform); post-heap high-half accesses were unmapped there, motivating Phase 2 board work.
Decision: proceed to Phase 2; the “revisit backend choice” stop condition was not triggered.
Phase 2 virt-pi5 boot (2026-07-30)
Gate: the unmodified embedded-rpi5 image must print === axiomos eBPF init === on virt-pi5.
- The initial run entered at Renode’s default EL3. axiomOS treats non-EL2 entry as EL1, so it programmed EL1 MMU registers while still at EL3, and high-half accesses went untranslated to the bus.
- Fix:
cpu SetAvailableExceptionLevels false falseandgic DisabledSecurity true, plus PL011 handoff state. High-half warnings vanished; real MMU translation is exercised, with no Renode fork or address alias. - Current result:
PI5_BENCH_FAIL stage=rp1_irq_route error=PcieLinkDown(0)
kernel panicked ... memory allocation of 20971520 bytes failedThe first line is expected until a PCIe/RP1 model exists. The second is the userspace blocker: the 20 MiB embedded rootfs allocation exceeds the guest heap’s usable contiguous capacity, an axiomOS issue.
Prebuilt-image adapter verification (2026-09-28)
Reference axiomOS main at b8953b59, inspected read-only; no builds.
| Check | Result |
|---|---|
| Rust CLI tests | 19 passed |
| Adapter regression tests (stand-ins) | 12 passed |
| Renode peripheral/platform tests | 5 passed |
doctor, shell syntax, whitespace | Passed |
| Renode Pi 5 live boot | Fail: V04_PANIC, memory allocation of 10485760 bytes failed; exit 1 |
| QEMU x86_64 live boot (QEMU 11.1.1) | Fail: BOOT_FATAL code=root-filesystem-invalid; exit 1 |
| QEMU AArch64 live boot | Not validated: no identified compatible virt image |
| QEMU RISC-V live boot | Not validated: demo ELF absent |
Before this change, QEMU test exited zero even with nonexistent inputs. The real Renode run also confirmed that the positional script path needs escaped spaces while in-script paths need quoting. Input hashes were unchanged after the x86_64 run, confirming snapshots.
Adapter tests use stand-in emulators. No mocked success is a guest boot PASS.
Later evidence (branch only)
These probes exist on fix/adapter-pid-readiness, not main:
- Identified virt build (2026-09-30): a clean clone of axiomOS
b8953b5withnightly-2026-07-02built the 20 MiB rootfs, but thevirt,cloud-profilekernel failed to link becausekernel/linker-virt.ldomits__kernel_end. - Linker fix (2026-09-30): axiomOS PR #196 (commit
a6f48d1) fixed the symbol and a validated manifest bundle was produced. Three QEMU runs (virt-11.1,gic-version=2,virtualization=off,secure=off, Cortex-A57, 1 GiB, semihosting off) each timed out after 30 s with empty UART. GDB showed_start_asmat0x40080000withx0=0storing to the Pi UART0x107d001000, after which PC jumps to0x200. The blocker is the Pi-specific early UART store on the virt entry path. - Renode model audit and RP1 models (2026-10-01): see RP1 Models.