Build the boot image BOOT.BIN

Caution

This flow is not supported by us in Cygwin! Use Linux terminal or WSL instead.

The boot image BOOT.BIN is built using the AMD Xilinx Bootgen tool which requires several input files.

For ease of use, we provide a bash shell script which allows building the BOOT.BIN from system_top.xsa (generated from building the project) and u-boot.elf (from the SD card with Kuiper image).

Warning

You need to have the AMD Xilinx Vivado, Vitis and Bootgen tool paths in the $PATH environment variable.

Check the Enviroment section of Build an HDL project.

For Zynq

This section applies to the Zynq-based carriers from our list, but not limited to them only.

Make sure that AMD Xilinx Vivado and Vitis are included in the path and a cross-compiler for arm exists before running the script. For more information about cross compilers, see Building the Zynq Linux kernel and devicetrees from source.

The script used is build_boot_bin.sh, which needs to be downloaded on your computer.

The script can take 3 parameters:

  • the path to the system_top.xsa;

  • the path to the u-boot.elf;

  • the name of the tar.gz output archive (name.tar.gz) (optional).

Important

The u-boot can be taken from the bootgen_sysfiles.tgz archive located in the project folder of the ADI Kuiper Linux image from the SD card.

Keep in mind that the u-boot is FPGA-specific!

See the beginning of SD Card flashing for instructions on how to obtain the ADI Kuiper image.

The script can be saved in the folder local to the project (for example, hdl/projects/fmcomms2/zed) and to be run from there.

~$
cd hdl/projects/fmcomms2/zed
~/hdl/projects/fmcomms2/zed$
chmod +x build_boot_bin.sh
~/hdl/projects/fmcomms2/zed$
./build_boot_bin.sh fmcomms2_zed.sdk/system_top.xsa path/to/u-boot.elf [output-archive]

The build output (BOOT.BIN) can be found in the local directory output_boot_bin where you ran the command. The folder follows the pattern: hdl/projects/$ADI_PART/$CARRIER/output_boot_bin.

For Zynq UltraScale+ MP

This section applies to the ZynqMP-based carriers (Zynq UltraScale+ MPSoC), usually ZCU102 in our systems, but not limited to this one only.

Make sure that AMD Xilinx Vivado and Vitis are included in the path and a cross-compiler for arm64 exists before running the script. For more information about cross compilers, see Building the ZynqMP / MPSoC Linux kernel and devicetrees from source.

The script used is build_zynqmp_boot_bin.sh, which needs to be downloaded on your computer.

The script can take 4 parameters (the last one is optional):

  • the path to the system_top.xsa;

  • the path to the u-boot.elf;

  • the path to the bl31.elf;

  • the name of the tar.gz output archive (name.tar.gz) (optional).

Important

The u-boot and the bl31.elf can be taken from the bootgen_sysfiles.tgz archive located in the project folder of the ADI Kuiper Linux image from the SD card.

Keep in mind that the u-boot is FPGA-specific!

See the beginning of SD Card flashing for instructions on how to obtain the ADI Kuiper image.

~$
cd hdl/projects/fmcomms2/zcu102
~/hdl/projects/fmcomms2/zcu102$
chmod +x build_zynqmp_boot_bin.sh
~/hdl/projects/fmcomms2/zcu102$
./build_zynqmp_boot_bin.sh fmcomms2_zcu102.sdk/system_top.xsa path/to/u-boot.elf path/to/bl31.elf

The build output (BOOT.BIN) can be found in the local directory output_boot_bin where you ran the command. The folder follows the pattern: hdl/projects/$ADI_PART/$CARRIER/output_boot_bin.

For Versal

This section applies only to the Versal carriers: VCK190 and VPK180.

Make sure that AMD Xilinx Vivado and Vitis are included in the path and a cross-compiler for arm64 exists before running the script. For more information about cross compilers, see Building the ZynqMP / MPSoC Linux kernel and devicetrees from source.

The script used is build_versal_boot_bin.sh, which needs to be downloaded on your computer.

The script can take 4 parameters:

  • the path to the system_top.xsa;

  • the path to the u-boot.elf;

  • the path to the bl31.elf;

  • the name of the tar.gz output archive (name.tar.gz) (optional).

Important

The u-boot and the bl31.elf can be taken from the bootgen_sysfiles.tgz archive located in the project folder of the ADI Kuiper Linux image from the SD card.

Keep in mind that the u-boot is FPGA-specific!

See the beginning of SD Card flashing for instructions on how to obtain the ADI Kuiper image.

~$
cd hdl/projects/ad9081_fmca_ebz/vck190
~/hdl/projects/ad9081_fmca_ebz/vck190$
chmod +x build_versal_boot_bin.sh
~/hdl/projects/ad9081_fmca_ebz/vck190$
./build_versal_boot_bin.sh ad9081_fmca_ebz.vck190.sdk/system_top.xsa (download | u-boot.elf) (download | bl31.elf | <path-to-arm-trusted-firmware-source>) [output-archive]

The build output (BOOT.BIN) can be found in the local directory output_boot_bin where you ran the command. The folder follows the pattern: hdl/projects/$ADI_PART/$CARRIER/output_boot_bin.

More information

(NOT RECOMMENDED) If you’re in for the long story, check out the AMD Xilinx wiki pages.