啊啊啊啊, 应该得用官方的sdk组合

未完成!!!!!!!!!!

UBoot 构建

wget <https://source.denx.de/u-boot/u-boot/-/archive/v2025.07-rc1/u-boot-v2025.07-rc1.tar.gz>
tar xf u-boot-v2025.07-rc1.tar.gz
cd u-boot-v2025.07-rc1
export CROSS_COMPILE=???
export ARCH=arm # uboot 没有 arm ar64 之分
make -j$(nproc)

bl31 构建

这是 arm 的安全固件, 主要是特权级管理的, 我编译upstream的atf, 但是编译报错了。所以我选择 xilinx 提供的。

wget [<https://github.com/Xilinx/arm-trusted-firmware/archive/refs/tags/xlnx_rebase_v2.10_2024.2.tar.gz>](<https://github.com/Xilinx/arm-trusted-firmware/archive/refs/tags/xlnx_rebase_v2.10_2024.2.tar.gz>)
他人幸福xlnx_rebase_v2.10_2024.2.tar.gz
cd arm-trusted-firmware-xlnx_rebase_v2.10_2024.2
export CROSS_COMPILE=???
make PLAT=zynqmp DEBUG=0
cp build/zynqmp/release/bl31.bin ../xlnx-zcu102

内核构建

# obtain source
wget <https://git.kernel.org/torvalds/t/linux-6.15-rc6.tar.gz>
tar xf linux-6.15-rc6.tar.gz
cd linux-6.15-rc6/

# get defconfig from xilinx
curl <https://github.com/Xilinx/linux-xlnx/raw/refs/heads/master/arch/arm64/configs/xilinx_defconfig> > arch/arm64/configs/xilinx_defconfig

make ARCH=arm64 xilinx_defconfig

# option 1, use llvm
make LLVM=1 ARCH=arm64 -j$(nproc)

# option 2, GCC
make CROSS_COMPILE=<path> ARCH=arm64 -j$(nproc)
cp arch/arm64/boot/Image ../xlnx-zcu102

qemu-system-aarch64 -M xlnx-zcu102,secure=on,virtualization=on \\
  -m 4G -serial stdio -display none -device loader,file=u-boot.elf \\
  -kernel bl31.elf \\
  -device loader,addr=0x40000000,file=Image \\
  -device loader,addr=0x2000000,file=zcu102.dtb