evidence · 8.4 KiB

README.md

Committed at docs/evidence/card-shell/kernel-rvv/board-trial/README.md. This is what grounds the requirements that cite it.

Open raw source

RVV trial preparation on the expanded card

This is an independent CPU-vector experiment. It does not enable the second core or GPU, change the normal renderer, or replace default Pixman acceptance. The card interaction budgets remain open.

Matching system and image

artifacts.json records the actual cross-builds at master 648eab07, including the now-verified root-growth service. The trial kernel, external Wi-Fi module, initrd and context probe form one complete system. Host extraction of the built boot partition verifies the kernel bytes, wrapped initrd payload/CRCs and selected system in bootargs. These are host proofs.

The complete closure was imported over Wi-Fi and pinned on the board. Its 112,751,696-byte Nix export SHA256 is 561037e0780a6cfa6367bb628e05d108d23c2e5c3ae0e990c473db0ad4e589a9. Only 16 paths differed from the current normal system. This now fits because the physical root expanded during the earlier storage boot trial.

The trial bootargs, DTB and wrapped initrd are staged below /var/lib/k230/rvv-trial/. Their 27,402,240-byte transport bundle SHA256 is fdf22f14b6166e3048cdd05b214dd992ea5ba9fe95bb44031c4216dac91186da. The normal boot partition and system profile were not replaced. All files are public build artifacts; runtime credentials are excluded.

Boot controller and guards

tools/rvv-board-preflight.py checks the current normal system/profile, physical layout and filesystem size against the committed storage capture, protected firmware/boot hashes, every staged artifact’s SHA256 and size, complete registered closure, trial GC root and running shell. The host runs it with Python’s isolated mode and requires a fresh complete token line.

tools/rvv-board-boot.py holds the board lock, catches U-Boot, and loads five artifacts into the established non-overlapping boot addresses. It verifies actual reported lengths and CRC32 of each loaded memory region. Trial files come from root partition 2; the unchanged SBI payload comes from boot partition

  1. Its default mode then resets to the ordinary boot selection. --boot instead imports the verified trial bootargs only into volatile U-Boot state and boots the matching in-memory kernel/initrd/DTB once. No saveenv, flash, partition change or persistent boot selection command is issued.

If a load fails while U-Boot remains available, the controller resets to normal boot and records whether a fresh Linux login appeared. A login alone is never claimed as vector execution, context preservation, shell recovery or speedup. A kernel hang after entering a trial may still require a physical reset; the normal persistent boot selection remains the recovery target.

Five host tests reject malformed paths, oversized artifacts, echoed/short or ambiguous load reports, wrong memory CRCs and stale/incomplete preflight tokens. The first physical preflight-parser failure is preserved in load-check.json and its analysis: the board guard passed, but the host did not account for the Linux shell’s leading bracketed-paste reset. No reboot was attempted by that failed run. The corrected parser removes only that known leading artifact and retains strict complete-line matching.

The next load attempt also remains failed in load-check2.json and its protocol analysis. The actual first-file CRC matched the expected value, but the vendor prints crc32 in lowercase. The inherited CRLF sender also supplied a second empty U-Boot command, repeating its previous command. The controller rejected the reply and observed Linux login after resetting into normal boot. It now sends exactly one CR per command and accepts the observed case while retaining exact, unique length/CRC requirements. No vector instruction was executed in either failed attempt.

Physical load-and-return proof

load-check3.json passes: U-Boot read the staged bootargs, SBI payload, trial kernel, DTB and trial initrd at the expected sizes, and every in-memory CRC32 matched the extracted image artifact. The controller then reset, without importing trial arguments or executing its kernel. The following ordinary boot reached Linux login. Selected console lines and provenance preserve this distinction.

load-normal-recovery.json separately passes the physical recovery checks: a fresh boot ID, the exact normal system, unchanged persistent boot-file/firmware hashes and root layout, successful no-op growth service, active shell/seatd, and Wi-Fi association plus HTTPS over wlan0. This proves read access from the expanded root and normal recovery. At this load-only checkpoint, the trial kernel had not executed. The later physical vector result is recorded below; rendering benefit remains open.

The next explicit operator trial uses the same controller with --boot:

python3 tools/rvv-board-boot.py --manifest HOST_TRIAL_MANIFEST \
  --private-log PRIVATE_LOG --output NEW_EVIDENCE/boot.json --boot

The host manifest combines artifacts.json with a normal member copied from docs/evidence/storage-capacity/board-repeat.json; the identical manifest and tools/rvv-board-preflight.py are staged with the verified boot files. Use new log/output names because prior runs must not be overwritten. After an actual trial boot, verify the selected running system and kernel configuration, then run the scalar hwprobe gate and the context probe. Preserve the ordinary boot selection and verify its recovery again before treating the experiment as safe.

Physical trial boot and vector context

The one-time trial now reached Linux login: boot1.json, selected boot lines and raw-log provenance. The verified five loads were followed by volatile trial-argument import and bootm; no persistent selection command was used.

capture-vector-state.py was transferred with matching MD5 and run through the serial console with isolated Python. It requires the physical device-tree model, exact trial /run/current-system, matching kernel command-line selection and all five expected vector configuration values. It then makes a scalar hwprobe query and invokes the immutable, capability-gated context diagnostic under a 15-second timeout.

vector-state1.json and its serial report record physical PASS at boot ID 3f80b720-c0e6-4f41-9437-e97aff248d28:

The diagnostic verifies representative vector arithmetic/control state across signals and scheduling. It does not exhaustively test every instruction or register, establish Pixman pixel correctness, measure card performance, or prove real-finger interaction. The normal renderer remains unchanged.

Preparation reconciliation maps the earlier build/full-guest/load checkpoints to proposal tasks with exact evidence hashes. The Pixman host detector test was rerun with its required pinned source environment variable; the initially bare invocation failed before running.

Normal recovery after executing vectors

An ordinary serial reboot returned to the persistent normal selection without operator intervention. trial-normal-recovery.json and its serial report pass the independent root-growth recovery checker: fresh normal boot, exact gnr36q… system, unchanged boot/firmware hashes and root layout, successful no-op growth service, active shell/seatd, protected credential permissions, Wi-Fi association and HTTPS over wlan0. No full-image flash or readback was performed.

The proposal’s build, guest, physical load, actual boot/context and subsequent normal recovery tasks are complete (9/14). Pixel comparison, optional renderer packaging, paired card costs, final decision and final publication remain open.