boot_media/rpi5/config.txt: Pi 5 native boot config (FABRIC-3.md §IV.3 item 6)
Build / build-amd64-iso (push) Waiting to run
Build / build-aarch64-iso (push) Waiting to run
Build / build-riscv64-img (push) Waiting to run

Researched against the official raspberrypi.com config.txt reference and one
real, working Pi 5 bare-metal project's own checked-in config.txt
(leopoldch/BatMetal), not assumed from general Pi knowledge:

- kernel=kernel_2712.img, os_check=0, device_tree=bcm2712-rpi-5-b.dtb
- enable_uart=1 added (correction to the item's original text): costs
  nothing when unused, and is the only diagnostic channel that would survive
  a framebuffer failure on the untested mailbox path (rpi5_native_boot.c).
- arm_64bit=1 dropped (correction to the item's original text): confirmed
  inert on Pi 5 by official docs.
- dtparam=pciex1 researched, deliberately omitted with rationale recorded --
  community-reported only, not needed until item 5's re-scoped RP1/PCIe work.
- os_check=0 vs. BatMetal's own config (which omits it) recorded as an open,
  unresolved discrepancy rather than silently picked.

boot_media/rpi5/README.md notes the one remaining gap this exposes:
kernel_2712.img names a file nothing currently builds (item 1's
separate-image build target is still outstanding future work).

Doc-and-config only, no compiled code changed. Three-arch QEMU acceptance
(amd64/aarch64/riscv64, in order) run to confirm non-regression only.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YcT3H2PQeyujrzjqS3Var
This commit is contained in:
Robert Allan James
2026-09-04 23:05:39 -04:00
co-authored by Claude Sonnet 5
parent 11c93773d0
commit ecdb32e0d6
11 changed files with 27679 additions and 4 deletions
+35 -3
View File
@@ -442,9 +442,41 @@ blocker for free.
is a materially larger, higher-blast-radius change than items 14 — it touches a file all
three architectures share and boot through today. Recording the real shape here is this
pass's own deliverable; building it is future work.
6. **`config.txt` contents, decided from research**: `kernel=kernel_2712.img` (or `kernel8.img`
with `os_check=0` if the Pi-5-specific name isn't used), `arm_64bit=1`, pointing at
`bcm2712-rpi-5-b.dtb`.
6. **`config.txt` contents — DONE, 2026-09-04.** Written to `boot_media/rpi5/config.txt`
(new directory — `configs/` is Kconfig defconfigs, `img/` is banners/docs, neither fits).
Researched against the official current `config.txt` reference
(raspberrypi.com/documentation/computers/config_txt.html) and one real, working Pi 5
bare-metal project's own checked-in `config.txt` (`leopoldch/BatMetal`), not assumed from
general Pi knowledge. Final contents, with the reasoning as comments in the file itself:
- `kernel=kernel_2712.img` — the real Pi-5-specific default filename firmware looks for
first (falls back to `kernel8.img` if absent); naming our image this exactly removes
ambiguity, so the item's own `kernel8.img`/`os_check=0` fallback alternative wasn't
needed.
- `os_check=0` — official docs name "bare-metal development" as the explicit use case for
this flag. Kept despite BatMetal's own config.txt *not* setting it and still booting —
recorded as an open discrepancy rather than silently resolved; no hardware in hand yet to
confirm which behavior is actually gated.
- `device_tree=bcm2712-rpi-5-b.dtb` — pins the DTB explicitly rather than relying on
board-revision auto-selection (confirmed via WebSearch of `config.txt` syntax docs).
- `enable_uart=1` — **correction to this item's own original text, which didn't have
this.** Added per review: costs nothing when nothing is listening, and is the only
diagnostic channel that survives a framebuffer failure on the first real boot (the
mailbox framebuffer path, `rpi5_native_boot.c`, has two documented-unverified details
and has never run on silicon). Enables the Pi 5's dedicated JST debug UART, not the
GPIO 14/15 header (`dtoverlay=uart0`, deliberately left out — needs a USB-serial
adapter this HDMI-only bring-up doesn't have). `rpi5_uart_base()` already exists
and is currently uncalled — this is the hook a UART fallback console would use.
- `arm_64bit=1`**dropped, correction to this item's own original text.** Official
docs: "Models that only support a 64-bit kernel ignore this flag" — confirmed inert on
Pi 5, not wrong to include, just meaningless.
- `dtparam=pciex1` — researched (BatMetal's own comment: "Required for RP1 access"), not
included. Community-reported only, not confirmed against official docs, and surprising
if true (RP1 is normally always-on). Not needed yet — item 5's real RP1/PCIe work is
still re-scoped, not implemented. Revisit if that work needs it.
- `boot_media/rpi5/README.md` also added, noting the one remaining gap this item's
`config.txt` exposes but doesn't itself close: `kernel_2712.img` names a file nothing
currently builds — item 1's separate-image build target (linking at `0x80000`) is still
outstanding future work, same gap that item's own text already flagged.
**Hardware-dependent, after 2026-09-17 (not started until then):**
7. Build the boot media (SD card: `config.txt`, `bcm2712-rpi-5-b.dtb`, kernel image).
+12
View File
@@ -0,0 +1,12 @@
# Raspberry Pi 5 native boot media
What goes on the SD card for the native (non-UEFI) boot path (FABRIC-3.md §IV):
- `config.txt` — checked in here, done (§IV.3 item 6).
- `bcm2712-rpi-5-b.dtb` — Raspberry Pi firmware's own stock DTB; not built by this
project, copied from the firmware release the card is otherwise built from.
- `kernel_2712.img`**does not exist yet.** `config.txt` names it, but no build target
in `Makefile.starkernel` currently emits a raw image by this name at load address
0x80000 — item 1 (entry stub) explicitly scoped a separate-image build target as future
work, not part of that item. Building this file is the remaining prerequisite before
item 7 (assembling the card) is possible.
+62
View File
@@ -0,0 +1,62 @@
# LithosAnanke native (non-UEFI) boot config for Raspberry Pi 5 (BCM2712).
# FABRIC-3.md §IV.3 item 6 -- see that section's own doc comment for the
# research trail behind each line (confirmed against raspberrypi.com's
# current config.txt reference and a real, working Pi 5 bare-metal
# project's own checked-in config.txt, not assumed from general Pi
# knowledge).
# Load our own kernel image directly -- no UEFI, no Linux. kernel_2712.img
# is the real filename Pi 5/500/CM5 firmware looks for first (its own
# 16K-page-size build); naming our own image this exactly, rather than
# falling back to kernel8.img, removes any ambiguity about which file the
# firmware picks up.
kernel=kernel_2712.img
# Disable the firmware's Linux-compatible-image sanity check. Without
# this, official docs describe it as checking for "a compatible Device
# Tree file before attempting to boot" and warn that "older non-compatible
# kernels would be loaded and then hang" -- documented specifically as the
# bare-metal-development escape hatch. One real working Pi 5 bare-metal
# project's own config.txt does NOT set this and still boots, so it may
# not be strictly required for every non-Linux image; kept here anyway
# since the official doc names this exact use case and there is no
# hardware in hand yet to verify which behavior is actually gated.
os_check=0
# Pin the exact devicetree explicitly rather than relying on the
# firmware's own board-revision auto-selection (which would also resolve
# to this file on real Pi 5 hardware, per general config.txt convention --
# explicit is certain, not just probably-correct).
device_tree=bcm2712-rpi-5-b.dtb
# Enable the dedicated debug UART (Pi 5's own JST connector, not the GPIO
# 14/15 header pins). Not because serial capture hardware is set up for
# this bring-up (that decision is HDMI-only, FABRIC-3.md §IV) -- this is
# a firmware-side switch that costs nothing when nothing is listening, and
# it is the only diagnostic channel that survives a framebuffer failure.
# rpi5_uart_base() (rpi5_dtb.c) already exists and is currently uncalled;
# this is the hook a UART-based fallback console would use if the mailbox
# framebuffer driver's two documented unverified details turn out wrong on
# real hardware.
enable_uart=1
# Deliberately NOT set, researched but not included this pass:
# dtoverlay=uart0 -- GPIO 14/15 header UART; needs a USB-serial
# adapter this bring-up doesn't have (HDMI-only
# decision). enable_uart=1 above covers the JST
# debug UART instead, which needs no extra cable.
# dtparam=pciex1 -- one real Pi 5 bare-metal project's own config.txt
# comments this as "Required for RP1 access", which
# would be surprising (RP1 is always-on in stock Pi
# 5 boots) and is community-reported, not confirmed
# against official docs. Not needed for this boot
# (no RP1 access yet -- FABRIC-3.md §IV.3 item 5 is
# still re-scoped, not implemented). Revisit if that
# item's own real Broadcom-indirect PCIe work needs
# it.
# arm_64bit=1 -- researched and dropped: official docs state
# "Models that only support a 64-bit kernel ignore
# this flag" -- inert on Pi 5, not wrong to include,
# just meaningless. The original item 6 wording
# named this; corrected here rather than carried
# forward.
+1 -1
View File
@@ -1,5 +1,5 @@
# Capsule Block Manifest — Auto-generated
<!-- Generated by mkcapsule --manifest 2026-09-05T02:45:26Z -->
<!-- Generated by mkcapsule --manifest 2026-09-05T03:03:47Z -->
<!-- DO NOT EDIT — re-run mkcapsule --manifest to refresh. -->
<!-- Hand-written justifications and immutability notes live -->
<!-- in MANIFEST.md alongside this auto-generated index. -->
BIN
View File
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff