Build the boot image BOOT.BIN

Caution

This flow is not supported by us in Cygwin! Use Linux terminal or WSL instead, or the not recommended option -> Building the BOOT.BIN in Vivado GUI.

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.

As prerequisites, you need to have xlsclients from the x11-utils package installed in your Linux/WSL system.

For Zynq

This section applies to the Zynq-based carriers from our list.

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.

If you didn’t use make parameters when building the project, then the script can be saved in the folder local to the project (for example, hdl/projects/$ADI_PART/$CARRIER) and to be run from there.

If you did use make parameters, then you need to go to the build folder that was created based on the parameters you gave, (would look like this hdl/projects/$ADI_PART/$CARRIER/$param1_param2), save it there and run it 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 following pattern if make parameters were not used hdl/projects/$ADI_PART/$CARRIER/output_boot_bin, and this pattern if parameters were used hdl/projects/$ADI_PART/$CARRIER/$PARAM1_PARAM2/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.

If you didn’t use make parameters when building the project, then the script can be saved in the folder local to the project (for example, hdl/projects/$ADI_PART/$CARRIER) and to be run from there.

If you did use make parameters, then you need to go to the build folder that was created based on the parameters you gave, (would look like this hdl/projects/$ADI_PART/$CARRIER/$param1_param2), save it there and run it from there.

~$
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 following pattern if make parameters were not used hdl/projects/$ADI_PART/$CARRIER/output_boot_bin, and this pattern if parameters were used hdl/projects/$ADI_PART/$CARRIER/$PARAM1_PARAM2/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.

If you didn’t use make parameters when building the project, then the script can be saved in the folder local to the project (for example, hdl/projects/$ADI_PART/$CARRIER) and to be run from there.

If you did use make parameters, then you need to go to the build folder that was created based on the parameters you gave, (would look like this hdl/projects/$ADI_PART/$CARRIER/$param1_param2), save it there and run it from there.

~$
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 following pattern if make parameters were not used hdl/projects/$ADI_PART/$CARRIER/output_boot_bin, and this pattern if parameters were used hdl/projects/$ADI_PART/$CARRIER/$PARAM1_PARAM2/output_boot_bin.

More information

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