Skip to content

An armv7 root and release for orchard's 32-bit platforms - #8

Merged
henrikklee merged 4 commits into
mainfrom
armv7-root
Nov 7, 2026
Merged

henrikklee merged 4 commits into
mainfrom
armv7-root

Conversation

@henrikklee

Copy link
Copy Markdown
Contributor

Apple's 32-bit boards (apple-armv7) get the same Minimal Alpine system as an armv7 root, released on its own: the root as a block image plus what orchard's 32-bit index (platforms-armv7.toml) lists: the ARMv7 layer, install tools and each board's Cascadia loader. No recovery, no loader or device code here.

  • orchard build --platform apple-armv7 (or tools/build.py --arch armv7) builds it.
  • The root is built with arm64 tools only: Alpine's native apk unpacks signed armv7 packages without running their scripts; the recipe does as files what those scripts would. No emulation. Root image 21.8 MB, about 25 s.
  • Same services as the 64-bit root; Alpine's dropbear and udhcpd stand in for orchard's arm64 static tools. The audit checks every ELF is of the root's architecture.
  • Buttons and splash helpers size kernel structures per architecture; both roots now carry resize2fs.

Verified: unit tests; the armv7 root passes the audit's root checks; the 64-bit build is unchanged end to end. Not verified: a full armv7 release (needs orchard's 32-bit index from the armv7-direct-boot work) and hardware.

armv7/ (the recovery base, #5) becomes obsolete once 32-bit is recovery-less everywhere; removal proposed separately. Replaces #6.

input_event, the key capability words and fb_fix_screeninfo hold C longs:
8 bytes on arm64, 4 on armv7. The helpers size them natively, so the same
scripts work in a 32-bit root.
The install finish step grows the root from inside it; Alpine keeps
resize2fs in e2fsprogs-extra.
orchard build --platform apple-armv7 (or tools/build.py --arch armv7) builds
the same system as an armv7 root, released on its own from orchard's 32-bit
index: the root as a block image, its logo, and the boards, loaders and
layer the index names. One release has one root of one architecture.

The pinned arm64 Alpine image builds it: its apk unpacks the signed ARMv7
packages without their scripts, and the recipe does as files what those
scripts would (BusyBox applet links, accounts, /etc/shells), then merges
/usr with the arm64 merge-usr. No ARMv7 code runs, so no emulation.
Alpine's dropbear and udhcpd take the place of orchard's arm64 static
tools; the audit checks every ELF file is of the root's architecture.
A 32-bit release names each board's Cascadia loader ([cascadia.BOARD], from
the index's loaders.cascadia), boots with recovery-autogo and has no Pongo,
m1n1 or logo (orchard docs/distribution-contract.md, "32-bit roots"). From
a published orchard build it takes platforms-armv7.toml with
--architecture arm.
@henrikklee
henrikklee merged commit 95a8d0c into main Nov 7, 2026
7 checks passed
@henrikklee
henrikklee deleted the armv7-root branch November 7, 2026 13:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant