***************************************************
Xilinx ZCU102 / ZCU104 / ZCU106 boards - ZynqMP SoC
***************************************************
This document describes the Buildroot support for the ZCU102, ZCU104
and ZCU106 boards by Xilinx, based on the Zynq UltraScale+ MPSoC (aka
ZynqMP). It has been tested with the ZCU102 and ZCU106 production
boards.
Evaluation board features can be found here with the links below.
ZCU102:
https://www.xilinx.com/products/boards-and-kits/zcu102.html
ZCU104:
https://www.xilinx.com/products/boards-and-kits/zcu104.html
ZCU106:
https://www.xilinx.com/products/boards-and-kits/zcu106.html
How to build it
===============
Configure Buildroot: (use the command for the specific board)
$ make zynqmp_zcu102_defconfig
$ make zynqmp_zcu104_defconfig
$ make zynqmp_zcu106_defconfig
Compile everything and build the rootfs image:
$ make
Result of the build
-------------------
After building, you should get a tree like this:
output/images/
+-- atf-uboot.ub
+-- bl31.bin
+-- boot.bin
+-- boot.vfat
+-- Image
+-- rootfs.ext2
+-- rootfs.ext4 -> rootfs.ext2
+-- sdcard.img
+-- system.dtb -> zynqmp-zcu106-revA.dtb
+-- u-boot.itb
`-- zynqmp-zcu106-revA.dtb
How to write the SD card
========================
WARNING! This will destroy all the card content. Use with care!
The sdcard.img file is a complete bootable image ready to be written
on the boot medium. To install it, simply copy the image to an SD
card:
# dd if=output/images/sdcard.img of=/dev/sdX
Where 'sdX' is the device node of the SD.
Eject the SD card, insert it in the board, and power it up.
Support for other boards:
=========================
If you want to build a system for other boards based on the same SoC, and the
board is already supported by the upstream kernel and U-Boot, you simply need
to change the following Buildroot options:
- Kernel Device Tree file name (BR2_LINUX_KERNEL_INTREE_DTS_NAME)
- U-Boot (BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS="DEVICE_TREE=")
Custom psu_init_gpl.c/h support:
To generate a working boot.bin image, psu_init_gpl.c/h are required in
the U-Boot source tree. Without those files, boot.bin will be built
successfully but it will not be functional at all. Those files are
output from the Xilinx tools, but for convenience, U-Boot includes the
default psu_init_gpl.c/h of popular boards. Those files may need to be
updated for any programmable logic or DDR customizations which impact
psu_init (clock/pin setup & mapping/AXI bridge setup/etc). See
board/xilinx/zynqmp/ directory of U-Boot for natively supported psu_init
files. If the psu_init files for your board are not found in U-Boot,
you need to add them using BR2_TARGET_UBOOT_ZYNQMP_PSU_INIT_FILE.
1) Start with a defconfig supported by Buildroot (e.g. ZCU106)
make zynqmp_zcu106_defconfig
2) make menuconfig
Visit the following menu to configure BR2_TARGET_UBOOT_ZYNQMP_PSU_INIT_FILE
Bootloaders --->
U-Boot --->
() Custom psu_init_gpl file
3) make
==============
Important Note
==============
The DDR memory on the original ZCU102 and ZCU106 boards is EOL.
The Buildroot defconfigs for these boards use the new DDR memory
which is configured by the u-boot spl initialization with the
Buildroot config options below.
New DDR Memories:
BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS="DEVICE_TREE=zynqmp-zcu102-rev1.0"
BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS="DEVICE_TREE=zynqmp-zcu106-rev1.0"
If nothing is printing upon boot, most likely it is because the
board has the original DDR memories. To fix the problem, modify
the Buildroot defconfig file to use the u-boot spl initialization
for the original DDR memory using the config below for the target
board.
Original DDR Memories:
BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS="DEVICE_TREE=zynqmp-zcu102-revA"
BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS="DEVICE_TREE=zynqmp-zcu106-revA"
For more information on this issue:
https://support.xilinx.com/s/article/71961?language=en_US