| cmake_plat | zcu106 | ||
|---|---|---|---|
| xcompiler_arg | -DAARCH64=1 | ||
| arm_hardware | true | ||
| platform | Zynq ZCU106 Evaluation Kit | ||
| arch | ARMv8A | ||
| virtualization | true | ||
| iommu | true | ||
| soc | Zynq UltraScale+ MPSoC | ||
| cpu | Cortex-A53 | ||
| verification |
|
||
| Contrib | <a href="https://dornerworks.com">DornerWorks</a> | ||
| Maintained | <a href="https://dornerworks.com">DornerWorks</a> | ||
| parent | /Hardware/ | ||
| SPDX-License-Identifier | CC-BY-SA-4.0 | ||
| SPDX-FileCopyrightText | 2020 seL4 Project a Series of LF Projects, LLC. |
The board is Zynq UltraScale MPSoC ZCU106 Evaluation Kit. The seL4 implementation is the same as for the ZCU102
{% include hw-info.html %}
Xilinx maintains online material, including designs and documentation.
{% include sel4test.md %}
The ZCU102 also supports AArch32 mode. If you choose to build the AArch32 kernel,
please be sure to pass -DAARCH32=1 instead of -DAARCH64=1.
git clone https://github.com/Xilinx/arm-trusted-firmware.git
cd arm-trusted-firmware
make PLAT=zynqmp RESET_TO_BL31=1 CROSS_COMPILE=aarch64-linux-gnu-Generated ELF file can be found at build/zynqmp/release/bl31/bl31.elf.
git clone https://github.com/Xilinx/u-boot-xlnx.git
cd u-boot-xlnx
make xilinx_zynqmp_virt_defconfig
# Use "make menuconfig" to open the configuration interface, change the value
in "Default Device Tree" to "zynqmp-zcu106-rev1.0"
make CROSS_COMPILE=aarch64-linux-gnu-If you use gcc > 10, apply the following patch before compiling:
diff --git a/scripts/dtc/dtc-lexer.l b/scripts/dtc/dtc-lexer.l
index fd825ebba6..24af549977 100644
--- a/scripts/dtc/dtc-lexer.l
+++ b/scripts/dtc/dtc-lexer.l
@@ -38,7 +38,6 @@ LINECOMMENT "//".*\n
#include "srcpos.h"
#include "dtc-parser.tab.h"
-YYLTYPE yylloc;
extern bool treesource_error;
/* CAUTION: this will stop working if we ever use yyless() or yyunput() */If you choose to use the AArch32 kernel, apply the following patch:
diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c
index 52b08c4dbe..c9ebd33d15 100644
--- a/board/xilinx/zynqmp/zynqmp.c
+++ b/board/xilinx/zynqmp/zynqmp.c
@@ -358,7 +358,7 @@ unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc,
smp_kick_all_cpus();
dcache_disable();
armv8_switch_to_el1(0x0, 0, 0, 0, (unsigned long)entry,
- ES_TO_AARCH64);
+ ES_TO_AARCH32);
} else {
printf("FAIL: current EL is not above EL1\n");
ret = EINVAL;Generated ELF file is u-boot.elf.
Upstream U-Boot also works; instructions are here
Install Vivado SDK or Vitis Software Platform from Xilinx here (Requires a free Xilinx account). The following instructions are based on Vivado SDK v2019.1
Open Vivado SDK, create a new application project.
- OS platform: standalone
- Hardware Platform: ZCU102_hw_platform
- Processor: psu_cortexa53_0
- Language: C
- Compiler: 64-bit
- Hypervisor Guest: No
- Template: Zynq MP FSBL
Generated ELF file is in Debug directory
Open Vivado SDK, create a new application project.
- OS platform: standalone
- Hardware Platform: ZCU102_hw_platform
- Processor: psu_pmu_0
- Language: C
Generated ELF file is in Debug directory
Set DIP switch (SW6) to JTAG boot (on, on, on, on).
Start the Xilinx debug tool (shipped with Vivado SDK):
xsct -nodispUpload files to the board using XSCT prompt:
connect
targets -set -filter {name =~ "PSU"}
mwr 0xffca0038 0x1ff
targets -set -filter {name =~ "MicroBlaze*"}
dow pmufw.elf
con
target -set -filter {name =~ "Cortex-A53 #0*"}
rst -processor
dow fsbl.elf
con
dow bl31.elf
con
dow u-boot.elf
con
# Load the seL4 image in ELF format, the file can be found in the sel4test build directory
dow elfloader/elfloader
conGet an SD card can format it with FAT32.
Set DIP switch (SW6) to SD boot (off, off, off, on)
Create a output.bif file with the following content:
the_ROM_image:
{
[bootloader, destination_cpu = a53-0] fsbl.elf
[pmufw_image] pmufw.elf
[destination_cpu = a53-0, exception_level = el-3] bl31.elf
[destination_cpu = a53-0, exception_level = el-2] u-boot.elf
}
Generate the bootable binary:
bootgen -arch zynqmp -image output.bif -w on -o BOOT.binCopy BOOT.bin to the SD card
Insert the SD card into ZCU102 then power on the board, and drop into the U-Boot prompt. When you're at the prompt, type the following to load the ELF file generated from building seL4test:
fatload mmc 0 0x8000000 sel4test-driver-image-arm-zynqmp
bootelf 0x8000000