Production-provenUpdate Delivery

Offline Update Bundle for Zynq-7000

Sign, package and apply A/B firmware updates on disconnected boards from removable media.

Owner: Mara OkaforEmbedded PlatformsContact ownerAdded 3 Aug 2026Updated 21 Sep 2026
  • Runs out of the box: yes
  • Tests: yes
  • CI: yes
  • Docs: yes
  • Used in production: yes

Purpose#

A bundle format and installer for boards that never see a network. A build host assembles the root file system, kernel and bitstream into one archive, signs the manifest with an offline key and writes it to removable media. On the board, a small installer verifies the signature, writes the inactive slot and switches the boot slot.

The boot loader counts failed boots and falls back to the previous slot automatically, so a bad update returns the board to its last working image without a technician on site.

What you will learn#

  1. Lay out an A/B partition scheme with a boot counter in the boot loader environment
  2. Package an image, bitstream and manifest as one signed offline bundle
  3. Verify a bundle signature on the target before writing any partition
  4. Roll back automatically after a failed boot

Media#

Technologies & features#

Technologies
BashC++Yocto ProjectPetaLinuxZynq-7000Linux
Features
Offline Update BundleFirmware UpdateCode Signing
Topics
Update DeliveryprimarySoftware IntegrityEmbedded/Linux

Lessons learned#

  • Worked

    A boot counter stored in the boot loader environment made rollback deterministic: three failed boots, then the previous slot, with no userspace code involved.

  • Didn’t work

    Verifying the signature after writing the slot meant a tampered bundle still overwrote the inactive image. Verify first, then write.

  • Decision

    The bundle ships the full image instead of a delta. Deltas saved little on our small images and added a verification step we did not want to own.

  • Limitation

    A bundle larger than the spare slot cannot be installed; the installer rejects it up front instead of failing halfway.

Try it#

Shell
git clone https://git.example.internal/embedded-platforms/zynq-ab-update.git
cd zynq-ab-update
./tools/make-bundle.sh --target zc702 --slot B --key keys/dev-signing.pem
# copy out/bundle.tar to a USB stick, insert it, then on the board:
apply-update /media/usb0/bundle.tar

The development key in keys/ is for the simulator only; production keys never leave the signing host.

Commands come from the owner’s README. Credentials are never stored here.

Resources#

Used in these tools#

Contributes to

StatusProduction-proven
OwnerMara Okafor
TeamEmbedded Platforms
Last commit18 Sep 2026
Slugoffline-update-bundle-zynq
Report a problem to the owner