Skip to content

boot: mount installed LwVM roots through the kernel provider - #92

Open
shaynelegault wants to merge 24 commits into
OrchardLinux:mainfrom
shaynelegault:p105/09-installed-root
Open

shaynelegault wants to merge 24 commits into
OrchardLinux:mainfrom
shaynelegault:p105/09-installed-root

Conversation

@shaynelegault

@shaynelegault shaynelegault commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Installed roots can use a checked native LwVM mapping through the kernel's logical provider. The static mapper validates the complete header pair, CRC, descriptor identity and chunk coverage before creating a Linux-only DM table. Reuse and removal require the original provider identity and exact owned table.

The installed initrd loads the descriptor-selected storage modules with explicit finite policy, starts USB serial and owner SSH rescue before discovering the root, and checks the selected filesystem identity before handoff. The backend's write gate remains independent of a requested read/write mapping. P105's install and storage capability states stay gated.

Orchard inputs carry the selected root_format and native tools.lwvm. Platform and recovery producers accept the mapper explicitly. The current platform index also preserves selected board, loader and tool records, including LwVM mapper/rescue paths. Its complete preflight rejects inconsistent selections before output creation. That index serves the ARM64 block-image install contract; P105's direct ARMv7 platform producer remains available while its release/launch integration develops.

Depends on bounded logical reads 89 and ARMv7 producers 82. Writable desktop qualification additionally requires the append writer 91. Minimal Linux 6 and Omarchy-A 29 consume the selected producer records.

Validation at b2b860f44d260bb58fc1174be9755ae636869207:

  • All 744 Orchard tests passed locally, with one Linux-only loader fixture skipped on macOS. The focused index and distribution-contract suites passed.
  • Actual ARMv7 mapper/parser checks cover malformed and disagreeing headers, fragmented/partial extents, wrong identity, exact DM table ownership and cancellation cleanup. These use synthetic media and Linux DM qualification.
  • The actual index/layer/initrd/archive integration verified selected board and native tool/loader bytes using source-pinned synthetic inputs. The Minimal companion's real manifest validator accepted its schema and local receipts.
  • Source, patch attribution and whitespace checks passed. GitHub checks run on the published current head.

The public P105 image tested during attempt 3 stopped before Linux USB appeared. It supplied no live mapper, mount, installed-init or rescue qualification for this PR. This remains draft until the exact kernel/config/module/initrd path passes those P105 checks. The owner tests the iPad mini; other owners cover other devices.

Proposed changelog text awaits owner approval: Boot checked installed LwVM Linux roots through the kernel provider with early USB recovery access.

Select ARM/v7 or ARM64 tool recipes explicitly and keep their outputs in
separate caches. Pin Debian's ARMHF BusyBox package and verify each finished
tool's ELF architecture and static linkage. Native builds require a host
whose architecture matches the selected target.

Assisted-by: LLM
Use board-owned handoff data to compile the ARM32 staging loader. Preserve
Cascadia's cache/MMU handoff and require executable code at the upload
address. A checked configuration places the supplied external initramfs
in reserved RAM before entering Linux through its edited DTB.

Bound the zImage decompressor workspace and preserve the kernel bytes.
Add synthetic layout tests and a Linux fixture that exercises the actual
loader C copy and rejection paths. Source provenance is recorded in NOTICE.
The external-initramfs handoff still requires physical qualification.

Assisted-by: LLM
Resolve one root architecture's per-platform loader and target tools through
Orchard's producer contract. Preserve explicit board selection for Cascadia
and stage ARM EABI5 hard-float Python dependency closures. Platform layers
use the declared kernel image and validate the requested root ISA.

Route RAM and recovery assembly through the declared payload format, bind
Cascadia DTBs to their selected board, and keep Pongo inputs on their own
boot path. Existing ARM64 default arguments remain supported. Document the
producer contract and exercise cache separation and architecture refusal.

Assisted-by: LLM
Carry a descriptor-selected host USB identity policy through the checked Cascadia bootargs, bind each upload to its selected hardware and a fresh attempt, and revalidate that provenance in RAM. ARM64 recovery keeps its existing ADT identity path.

Stage declared USB dependencies and defer manual storage modules until the host has serial and authenticated SSH. Reject manual drivers built into the kernel or selected as USB dependencies before assembly.

Validated with 666 unit tests (one Linux-only skip) and independent cross-layer review. Physical P105 qualification remains pending.

Assisted-by: LLM
ARMv7 and ARM64 use different kernel bases while driver patches belong in
shared subsystem directories. An adjacent patch scope lets those directories
carry both platforms without applying a patch to the wrong base.

Add schema-1 .patch.toml scopes and scoped-only series layers. Export writes
scopes and missing layers with --platform, preserving existing patch numbers.
Builds, conversion and regeneration use the same selector, and published
source keys include selected scope metadata. Refuse malformed scopes and
duplicate selection before build or export work starts.

Existing patch bytes, ordered platform selections and published source keys
are unchanged. Cover scope validation, export planning and deterministic
kernel/m1n1 regeneration with host tests.

Assisted-by: LLM
Record the measured geometry, native address views and the proposed
kernel read path. Keep the chip evidence and device capability comments
consistent with the pending exact-revision qualification.

All 34 catalog tests pass; regenerating the matrix keeps capability rows.

Assisted-by: LLM
Export the current ARMv7 H2FMI read source through kernel-tree/export.py.
Keep the existing import intact and scope the new MTD layer to apple-armv7.
The generated mail patch reproduces source fe8c2f696 exactly.

The owner approved draft exports before physical qualification. The new
source has focused ARMv7 and sanitizer results; exact-build device checks
remain pending. Public logical storage capability stays gated.

Assisted-by: LLM
Document the default-off H2FMI program primitive and its host checks.
Keep logical storage_write missing while exact-build programming and
translation-layer persistence remain unqualified. Record chip evidence
and the shared reference-profile regression requirement.

All 34 catalog tests pass. Matrix regeneration leaves capability rows
unchanged; the P105 device and A5 chip schemas validate.

Assisted-by: LLM
Export source cef7165b0 after the geometry/read dependency, preserving the
scoped MTD series. Require complete pages, blank destinations and exact
synchronous readback. The controller supplies no erase operation.

The generated patch reproduces the source commit exactly. Programming
stays disabled in the recovery candidate, and exact-revision physical
qualification remains pending under the approved draft export order.

Assisted-by: LLM
Document native VFL/SwissPPNFTL recovery, saved-capture crosschecks,
KUnit results and the latest finite provider lifetime. Keep both logical
storage capabilities missing until exact-revision device qualification.
Record the host and ARM64 test limits separately from hardware evidence.

All 34 catalog tests pass. Matrix regeneration leaves capability rows
unchanged; the P105 device and A5 chip schemas validate.

Assisted-by: LLM
Export the canonical PPN provider, native map reader and finite lifetime
policy from current ARMv7 source. Preserve the preceding geometry and
programming topics in series order, with every MTD patch scoped to ARMv7.

The official export reproduces e7d118292 after its read prerequisite.
Saved-capture crosschecks, real KUnit and ARMv7 object builds pass. The
owner approved draft export before exact device qualification, which
remains pending. Logical storage writes stay gated.

Assisted-by: LLM
Resolve the Apple ARMv7 config from kernel source commit
0921ec24248913d2a99ad1a262b2ab1e66f062e3 through kernel-tree/export.py.
CONFIG_MTD_APPLE_SFTL=m lets recovery load the read-only frontend after
its USB recovery link is ready. Keep CONFIG_MTD_APPLE_H2FMI_WRITE=n so
this config exposes no raw page-program path.

LLVM 19 olddefconfig and savedefconfig passed. The 23 focused kernel,
platform and export tests passed. Physical qualification remains pending.

Assisted-by: LLM
Read matching CRC-checked LwVM headers from the current logical storage provider and derive ordered Linux-only extents. Create or verify an exact DM-linear mapping without a userspace NAND worker or Python runtime.

Exercise the real C parser with synthetic fragmented media and provide a disposable Linux loop-device integration check.

Assisted-by: LLM
Stage the checked static mapper and owner recovery tools for LwVM platforms. Find root=PARTUUID in the current logical provider, retain USB serial and key-provisioned SSH before mounting, and hand the mounted root to its own init.

Add optional tools.lwvm and root_format input records with --platform-lwvm overrides so distribution builds pass finished helpers to platform and recovery producers. The GPT path retains its existing component contract.

Keep P105 installation gated on hardware qualification and an explicitly reviewed SFTL operating policy.

Assisted-by: LLM
Keep the existing GPT product naming and USB setup timing while LwVM roots retain early rescue. Check every target mount directory before moving any RAM mounts, leaving recovery intact when a directory is unavailable.

Assisted-by: LLM
Restrict the first logical-root backend to the declared P105 profile. J1 retains its existing root discovery path, and a platform-layer build covering different installed-root backends requires an explicit device before producing components.

Assisted-by: LLM
Reject geometry whose first chunk cannot hold two separate 4096-byte headers. Cover the aliased 3MiB/4MiB cases and the first accepted 8KiB chunk geometry using the real C parser.

Assisted-by: LLM
Include apple-sftl and its dependency closure only for the declared P105 installed-root profile. Keep J1 on its existing built-in storage path.

Validate explicit read lifetime and write opt-in parameters before passing separate arguments to BusyBox modprobe. A writable root option leaves the default-off backend gate unchanged, and enabling it requires both finite limits.

Exercise actual initrd module archives, the catalog boundary, and the ARMv7 BusyBox policy wrapper with a fixture module loader. The resolved kernel config dependency remains separately gated on export and physical qualification.

Assisted-by: LLM
Accept the checked receipt identity and ordered extent table for unmap. Stat the original provider and verify the complete DM table, mode and UUID before removing an unused mapping, leaving mismatches and busy mappings intact.

Cleanup avoids provider opens and header reads so recovery can refence storage after its read budget expires. Exercise invalid-header, busy-holder, table-mismatch and idempotent cleanup in the real Linux loop fixture.

Assisted-by: LLM
Carry the resolved defconfig from Linux source commit 66d9d3ae49f15d12a58bdceca36d8974086fb671 through the official platform-scoped exporter. Select Apple SFTL as a module and device mapper built in for installed-root assembly.

The exporter wrote zero patches and one config, verified against the source branch from base e7d118292d828b9796d85d19872653f7d4a8cb67. Hardware qualification remains pending.

Assisted-by: LLM
Check for a value before consuming any option in the map, inspect and unmap parsers. Reject repeated mode arguments and exercise missing values without allowing a null argv access.

Assisted-by: LLM
Source the normal install add-on after storage loading and let it own its RAM mounts and USB access. Keep early LwVM rescue and its RAM handoff on ordinary starts. Exercise both paths with bounded shell fixtures.

Assisted-by: LLM
The install hook unmounts its RAM state and devpts before returning. Recreate them before root discovery and pass /run to installed init. Model the real cleanup and nested mount moves in the shell fixture, and fail the fixture when switch_root lacks either mount.

Assisted-by: LLM
@shaynelegault
shaynelegault force-pushed the p105/09-installed-root branch from a068e1d to 07f9d4c Compare November 6, 2026 21:46
Carry each input record's board selection, loader, native tools and LwVM
mapper into the platform producer. Falling back to shared tools discarded
explicit overrides and could build a layer with different inputs from
those checked by the distribution.

Validate the complete selection before creating output. Keep one coherent
loader and install-tools archive across the selected ARM64 platforms and
retain compatibility with older shared records. Cascadia continues to use
the direct ARMv7 platform producer until its release contract is added.

Ten index cases and six distribution-contract cases pass. The integration
fixture checks actual layer/initrd/archive contents from selected inputs,
and the companion Minimal Linux manifest passes schema and local-receipt
validation. Device qualification remains separate.

Assisted-by: LLM
@shaynelegault
shaynelegault marked this pull request as ready for review November 7, 2026 05:07
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