3.4 KiB
Gated build and deployment workflow
G0 - preflight
- Identify the project and target board; read its board reference.
- Hash the user-provided HDF/XSA before copying it.
- Verify matching tool versions and enough VM/build-disk space.
- Discover live Windows/VM/board addresses and the TFTP interface. Prove both ping and actual file transfer when available.
- Capture serial boot output, current environment, QSPI probe, boot mode evidence, MTD layout and current storage without writing.
- Verify JTAG/power control and a tested recovery method. Stop before erase if recovery is not credible.
- Capture the build input fingerprint and run the reuse check.
G1-G3 - build or verified reuse
For a rebuild, create a clean project, import the exact handoff, archive the generated baseline, then apply only reviewed board overlays. Configure an initramfs root filesystem and include at least:
- QSPI/MTD and board Ethernet/PHY support;
- selected SD/eMMC host support;
fdiskorparted,blkid, FAT formatting, ext4 formatting/checking,mount,umount, archive, checksum and TFTP tools;- enough
CONFIG_SYS_BOOTM_LENfor the uncompressed initramfs.
Build and package with logs and exit codes. Treat warnings about a detected flash differing from the device-tree expectation as unresolved board-profile drift even if access currently works.
Before deployment validate:
- generated DT contains the intended controller nodes and no conflicting alternate controller;
- BOOT.BIN contains exactly the declared components;
- image size fits its partition and DDR load range;
qspi_cache.py checkor equivalent delivery validation passes;- all artifacts have stable size and SHA-256.
G4 - boot region
Back up the known-good boot image when possible. Prefer the vendor-supported flash programmer with verify. If it fails, use a board-proven JTAG-to-DDR recovery path only after checking its address, size and marker protocol. Never improvise a recovery write on an unverified board.
After programming, fully remove and restore power. Confirm the intended U-Boot banner and QSPI probe. Repeat the cold boot; do not count a warm reset.
G5 - image region
Use separate checked operations:
- download the exact image and assert transferred byte count;
- compute RAM CRC/hash and match the manifest;
- probe QSPI and assert geometry;
- erase
ceil(image_bytes / erase_bytes) * erase_bytes, bounded by the image partition; - write exactly
image_bytes; - read back exactly
image_bytesto a second RAM address; - compare CRC/hash and every byte;
- only then save the QSPI-only bootcmd.
The bootcmd must make the origin unambiguous: probe QSPI, read the declared offset/length, apply only documented board fixes, and boot that RAM address. Do not add silent SD/network fallback unless explicitly required.
G6 - hardware acceptance
For at least two complete power cycles, retain console evidence of:
- BootROM mode/source evidence, QSPI probe, exact QSPI read offset/length and FIT load;
- Linux release, initramfs mounted as root, expected MTD partitions;
- board Ethernet/PHY identity, live address and real TFTP transfer;
- required storage host registration and device-tree/register evidence;
- required deployment tools.
With removable media inserted, first perform a read-only gate: device enumeration, CID, capacity, partition table, current mounts, and bounded sample reads. Formatting and production deployment are separate destructive phases.