...
As an example to build U-Boot for ZC702 execute:
Code Block |
---|
|
make distclean
make zynq_zc702_defconfig
make |
As an example to buildU-Boot for ZCU102 execute:
Code Block |
---|
|
make distclean
make xilinx_zynqmp_zcu102_rev1_0_defconfig
make |
After the build process completes the target u-boot elf-file is created in the top level source directory, named 'u-boot/u-boot.elf'. Additionally in the tools/ directory the 'mkimage' utility is created, which is used in other tasks to wrap images into u-boot format
.For 2020.1 and above releases common defconfig is being made.
Platform | U-boot defconfig |
---|
All Zynq UltraScale+ (except for mini) | xilinx_zynqmp_virt_defconfig |
All Zynq (except for mini) | xilinx_zynq_virt_defconfig |
To build U-boot for ZC702 board, follow below steps.
Code Block |
---|
make distclean
make xilinx_zynq_virt_defconfig
export DEVICE_TREE="zynq-zc702"
make |
device tree can be found under arch/arm/dts/ with the name zynq-zc702.dts
A dtb with the name zynq-zc702.dtb will be generated under arch/arm/dts after the build.
Code Block |
---|
make distclean
make xilinx_zynqmp_virt_defconfig
export DEVICE_TREE="zynqmp-zcu102-rev1.0"
make |
device tree can be found under arch/arm/dts/ with the name zynqmp-zcu102-rev1.0.dts.
Similarly one can find for all other zynqmp/zynq boards with matching name.
If u-boot is build without exporting DEVICE_TREE, the dtb needs to be loaded at 0x100000 in ddr(configurable with CONFIG_XILINX_OF_BOARD_DTB_ADDR).
device tree should be loaded before loading u-boot.elf. The dtb load address is same for zynq/zynqmp by default.
To make mkimage available in other steps, it is recommended to add the tools directory to your $PATH.
Code Block |
---|
|
cd tools
export PATH=`pwd`:$PATH |
The Xilinx U-Boot project is based on the source code from git:git.denx.de
The devices that have been tested include UART lite, UART 16550, Linear flash, EMAC lite, LL TEMAC with PLB DMA, and AXI EMAC with AXI DMA. The timer counter and interrupt controller were also tested.
Tests were done on Spartan 605 (PLB and AXI) and Kintex 705 (AXI) evaluation platforms using XPS 14.2 and 14.3.
The hardware project
TypicalMake sure the following peripherals are included in the system:
Name | Value |
MicroBlaze processor configured for (Low-end) Linux with MMU | microblaze cpu |
serial | uartlite or uart16550 |
external memory controller | ddr or sdram |
intc | interrupt controller |
timer | timer with interrupts |
OptionalU-Boot includes capabilities of writing to/reading from flash and also transferring files over a network if the available hardware is present:
flash | NOR flash |
spi | spi/qspi flashes |
i2c | i2c controller |
ethernet lite | EMAC lite |
ethernet | AXI EMAC with AXI DMA |
Additional peripherals and features are considered outside the scope of this page.
Building U-Boot
There are two ways to compile u-boot for Microblaze board.
1. OSL flow to compile u-boot
The U-Boot source tree can be downloaded from the Xilinx Git server. The repository is
u-boot-xlnx and the branch is
master:
Code Block |
---|
|
git clone https://github.com/Xilinx/u-boot-xlnx.git |
The U-Boot compilation will use the definitions and flags defined in config.mk and xparameters.h . Import these two files generated by the petalinux project into the U-Boot directory for MicroBlaze Code Block |
---|
|
cp <plnx-proj-root>/components/plnx_workspace/fsboot/fsboot/mba_fs_boot_bsp/microblaze_0/include/xparameters.h <u-boot-xlnx>/board/xilinx/microblaze-generic/
cp <plnx-proj-root>/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/config.mk <u-boot-xlnx>/board/xilinx/microblaze-generic/ |
Rename platform-auto.h to microblaze-generic.h Code Block |
---|
|
<plnx-proj-root>/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h |
After renaming, copy microblaze-generic.h to the u-boot-xlnx/include/configs Code Block |
---|
|
cp <plnx-proj-root>/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/microblaze-generic.h u-boot-xlnx/include/configs/ |
Replace the dts file of u-boot-xlnx via petalinux project Code Block |
---|
|
Convert the .dtb file into .dts file in petalinux project
dtc -I dtb -O dts -o <plnx-proj-root>/components/plnx_workspace/device-tree/device-tree-generation/plnx_microblaze-system.dts |
Renamed this generated dts file to microblaze-generic.dts and copy it to the u-boot-xlnx Code Block |
---|
|
<plnx-proj-root>/components/plnx_workspace/device-tree/device-tree-generation/microblaze-generic.dts
cp <plnx-proj-root>/components/plnx_workspace/device-tree/device-tree-generation/microblaze-generic.dts u-boot-xlnx/arch/microblaze/dts |
Go into the u-boot-xilinx top directory and run the following commands in bash to compile the u-boot
Code Block |
---|
|
make distclean
export CROSS_COMPILE=microblazeel-xilinx-linux-gnu-
export ARCH=microblazeel
make microblaze-generic_defconfig
scripts/kconfig/merge_config.sh -m .config <plnx-proj-root >/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/config.cfg
make |
Loading and running U-Boot
Downloading U-Boot to MicroBlazeOnce the bitstream containing at least a minimally configured hardware system has been downloaded to the FPGA, XMD is used to download the cross-compiled U-Boot to the MicroBlaze soft processor:
Code Block |
---|
|
XMD> connect mb mdm
XMD> dow <u-boot-xlnlx>/build/u-boot
XMD> run |
U-Boot commandsThe list of U-boot commands can be accessed while in the U-Boot prompt. Type "help" or "?" for a complete listing of available commands.
Documentation on U-Boot may be found at
http://www.denx.de/wiki/DULG/Manual .
Running Linux using U-Boot
Preparing the Linux images for U-BootSpecific details on building the kernel for MicroBlaze are contained in the
Build Kernel page.
Instructions to obtain a root filesystem can be found at the
Build and Modify a Root File System page.
The kernel and the root filesystem must be wrapped with a U-Boot header in order for U-Boot to accept these files. The mkimage utility is used for this purpose, however, it is not part of the MicroBlaze GNU tools. It is part of U-Boot itself and if U-Boot has been compiled as specified on this page, it will be found under
<u-boot-xlnx>/build/tools/ .
When building linux.bin, as explained in the
Build Kernel page, the kernel build process automatically creates an additional image, with the ".ub" suffix.
linux.bin.ub is the Linux binary image wrapped with a U-Boot header. The Linux compilation process will automatically invoke mkimage, therefore, it is important to include the path to the U-Boot tools in the PATH environment variable.
The root filesystem also needs to be wrapped with a U-Boot header as follows:
Code Block |
---|
|
mkimage -A microblaze -O linux -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz |
Booting LinuxXMD or TFTP may be used to download Linux to the FPGA (memory). U-Boot can then use these files to boot Linux. Once the kernel, root filesystem, and device tree images are present in memory, the command to boot Linux is:
Code Block |
---|
|
U-Boot> bootm <addr of kernel> <addr of rootfs> <addr of device tree blob (dtb)> |
Note: Make sure the kernel and root filesystem images are wrapped by with the U-Boot header. The device tree blob does not need to be wrapped with the U-Boot header.
Creating the BSP required by U-Boot (Unverified)This is old BSP and doesn't tested with latest u-boot.
To build U-Boot correctly, some information about the system will need to be provided to the U-Boot build tree. This information is generated by the U-Boot BSP.
First, download the U-Boot BSP source
Once it has been installed and the project has been exported to SDK, the U-Boot BSP can be created for the system.In order for the U-Boot BSP to generate the necessary settings for U-Boot, it needs to know which specific peripherals should be used for some corresponding tasks. These selections are made in the fields/drop-down menus located in the 'Settings' of the newly created U-Boot BSP. For example:
Name | Value |
stdout | rs232_uart_1 |
stdin | rs232_uart_1 |
main_memory | ddr2_sdram |
flash_memory | flash |
ethernet | hard_ethernet_mac |
timer | xps_timer_0 |
Once the U-Boot BSP has been compiled in SDK, the generated files, config.mk and xparameters.h, can be found at <sdk_workspace>/uboot_bsp_0/microblaze_0/libsrc/uboot_v*/ .
Downloading the source treeThe U-Boot source tree can be downloaded from the Xilinx Git server. The repository is
u-boot-xlnx and the branch is
master:
Code Block |
---|
|
linux-host> git clone git://github.com/Xilinx/u-boot-xlnx.git
linux-host> cd u-boot-xlnx |
Compiling U-BootThe U-Boot compilation will use the definitions and flags defined in config.mk and xparameters.h . Import these two files generated by the U-Boot BSP in SDK into the U-Boot directory for MicroBlaze located at <u-boot-xlnx>/board/xilinx/microblaze-generic/ .
Code Block |
---|
|
[[code]]
Xilinx's MicroBlaze GNU toolchain will be used to cross-compile U-Boot for MicroBlaze. Instructions on obtaining and setting up the newest cross-compilation toolchain for MicroBlaze may be found at [[MicroBlaze Gnu Tools|Microblaze GNU Tools]]. |
Code Block |
---|
|
Now that U-Boot and the toolchain are configured correctly, we can cross-compile U-Boot: |
linux-host> cd <u-boot-xlnx>
linux-host> export BUILD_DIR=$PWD/build
linux-host> make microblaze-generic_defconfig
linux-host> make
Build Steps