Skip to content

new-BP 24.04: restore A/B partition layout (system_a/system_b + EFI A/B) for OTA #55

Description

@mrlambchop

Summary

The new-BP scripts/assemble/config/partition_ext.xml makes the rootfs single-slot system and EFI single-slot efi. The established Tachyon layout (20.04 flow) is full A/B, and OTA relies on it. Shipped in 1.2.0 as a known gap.

Evidence

  • tachyon-release-builder/build-24_04-release.sh writes the same rootfs image to both system_a and system_b, and EFI to boot_a/boot_b:
    quiet_mod "$rp" "system_a" "filename" "$SYSTEM_IMAGE_NAME"
    quiet_mod "$rp" "system_b" "filename" "$SYSTEM_IMAGE_NAME"
    quiet_mod "$rp" "boot_a"/"boot_b" ...
    
  • Four overlay scripts still hardcode /dev/disk/by-partlabel/system_a (currently survive only via the cloudimg-rootfs fs-label fallback):
    • overlays/growfs/files/growfs.sh
    • overlays/particle-service/files/particle-service.sh
    • overlays/manufacturing/files/test-fs-resize.sh
    • overlays/growfs/test/test_resize.py

Impact

1.2.0 boots and flashes, but A/B OTA slot-switching cannot work (no system_b/EFI-B to update + switch to).

Fix direction

  • partition_ext.xml: systemsystem_a + add system_b; EFI → A/B (boot_a/boot_b or efi-A/B). Flash the same image to both slots at factory time.
  • Reconcile with grow-to-fill: rootfs slots can't both grow. Likely fixed-size system_a/system_b (≥~14 GiB; desktop rootfs is 11.66 GiB) + a grow data/userdata partition filling the rest of 64/128 GB. Repoint growfs at the data partition.
  • Fix the 4 stale system_a references.

Open questions (need platform/OTA owner)

  • Does new-BP UEFI/ABL boot by A/B slot, and what triggers the switch (bootctl/update_engine vs Particle OTA agent)? No A/B/OTA tooling found in composer or overlays.
  • Rootfs fixed (20.04 model) vs grow, and exact slot sizing for the 64 GB SKU.

Use the 20.04 rawprogram as the layout template.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions