Troubleshooting

Build failures

General build issues

Check the following if the project fails to build or generate a bitstream:

  1. Are you using the correct version of Vivado for this version of the repository? This design is built for Vivado 2025.2. build.tcl checks the installed Vivado version and refuses to build with any other version. If you are using a different version of the tools, refer to the release tags to find a matching commit of the repository.

  2. Do you have the license for the target’s Ethernet MAC? Every target needs one: the Versal MRMAC and the UltraScale+ CMAC (100G targets) have free, no-cost licenses; the 40G/50G Ethernet Subsystem (40G targets) needs a purchased or 30-day evaluation license. Without it the build fails at bitstream / device-image generation with a licensing error. Note that an evaluation license expires: a build that worked before can fail after the evaluation period ends. A CRITICAL WARNING about an evaluation license ([Vivado 12-1790]) on its own is not a failure.

  3. Do you have the right Vivado edition? Most boards need the Vivado Enterprise Edition (see the target tables in the build instructions).

  4. Did you copy/clone the repo into a short directory structure? Windows doesn’t cope well with long directory structures, so copy/clone the repo into a short directory structure such as C:\projects\. The runner checks the path length for the Versal targets and explains the subst workaround if it is too long.

PetaLinux build fails with bitbake petalinux-image-minimal failed and sstate fetch errors

If a ./build.sh petalinux --target <target> run ends with errors like

ERROR: <package>-<ver>-r0 do_..._setscene: Fetcher failure: Unable to find file file://.../sstate:...
[ERROR] Command bitbake petalinux-image-minimal failed

the actual build is not broken. These _setscene errors come from bitbake trying to pull prebuilt artifacts from the public sstate-cache mirror, which occasionally returns 404 for individual packages. Bitbake falls back to building those packages locally and succeeds, but still exits non-zero because of the failed fetches, so the runner stops before packaging. Fix: re-run the same command. The second attempt finds the missing packages in the local sstate cache and completes cleanly.

Yocto build

  • repo: command not found — install Google’s repo tool and make sure it is on your PATH.

  • The first build of a target needs internet access (repo sync and source downloads) and in the order of 60 GB of disk space per target. Use the offline / sstate mirror option to speed up repeated builds.

  • The PetaLinux and Yocto stages are refused on Windows; build them on a Linux machine.

Booting

A Yocto SD card does not boot (nothing after the boot ROM, or a U-Boot prompt)

The Yocto disk image (rootfs.wic.xz) does not contain BOOT.BIN where the BootROM looks for it, and on the VCK190 its EFI/BOOT/ directory is empty. After flashing, copy BOOT.BIN to the first (FAT32) partition of the card, and on the VCK190 also copy BOOTAA64.EFI to EFI/BOOT/ on that partition (see Yocto). Both files are in the Yocto zip. Without BOOTAA64.EFI, the VCK190 stops at the U-Boot prompt.

JTAG-booted PetaLinux waits for the root device

Waiting for root device /dev/mmcblk0p2...: the root filesystem is on the SD card even when booting over JTAG; prepare the SD card and insert it.

The FMC does not respond on the VCK190 (no Si5328, no modules)

The VCK190’s FMC VADJ rail must be on (1.5 V for this design) before the FMC’s Si5328 and QSFP28 modules can be reached. The Linux images enable it from U-Boot before every boot, and the echo server enables it itself (VADJ enabled (1.5V)). If you use your own boot flow, enable VADJ first (or set it from the board’s System Controller).