在PS端新增了SD、PCIe等接口后,导出.xsa文件。然后通过调研,我找到了AMD官网提供的工具Petalinux。Petalinux 工具是 Xilinx 公司推出的嵌入式 Linux 开发套件,包括了 u-boot、Linux Kernel、device-tree、rootfs 等源码和库,以及 Yocto recipes,可以让客户很方便的生成、配置、编译及自定义 Linux 系统。 这里不使用米联客提供的工具包主要是因为考虑到AMD官网提供的文档更加齐全,出现问题AI可以更好的帮我debug。
本项目采用SD卡启动,系统从上电到进入Linux用户空间的流程如下:
上电
↓
BootROM:根据启动拨码访问SD卡,并加载BOOT.BIN中的FSBL
↓
FSBL:初始化MIO、时钟、DDR和SerDes,并加载后续启动分区
↓
PMUFW:负责电源、复位和平台管理
↓
bitstream:配置PL端硬件逻辑
↓
ATF/BL31:完成ARM可信固件和运行级切换
↓
U-Boot:执行boot.scr,从SD卡读取并校验image.ub
↓
Linux Kernel + Device Tree + initramfs:初始化内核和驱动并挂载根文件系统
↓
进入Linux用户空间并显示login提示
其中,设备树并不是在Linux内核之后单独运行的程序,而是由U-Boot传递给内核,用来描述DDR、SD、PCIe、AXI DMA等硬件。当前启动文件的作用为:
文件 | 主要内容与作用 |
|---|---|
| FSBL、PMUFW、bitstream、ATF和U-Boot等启动组件 |
| U-Boot启动脚本,指定如何加载 |
| Linux Kernel、Device Tree和initramfs |
虚拟机中安装Linux系统,这里我安装的是Ubuntu22.04。
开启FTP服务,使用Filezilla传输文件非常方便,可以在windows中导出xsa文件后直接拖拽到ubuntu虚拟机中。
sudo apt install -y vsftpd
sudo vi /etc/vsftpd.conf
# 找到以下两行内容,确保这两行内容前无#
# local_enable=YES
# write_enable=YES
在Windows中装完Filezilla后,即可方便地传输文件了。 
开启SSH服务,方便使用 mobaxterm 远程。
sudo apt install openssh-server

安装PetaLinux 2023.2
PetaLinux安装程序应由普通用户运行,不建议直接使用sudo执行安装程序。先创建安装目录并将其所有权交给当前用户:
sudo mkdir -p /opt/pkg/petalinux/2023.2
sudo chown -R "$USER:$USER" /opt/pkg/petalinux
为安装程序添加执行权限并开始安装,其中安装程序路径根据实际文件名修改:
chmod +x ~/Downloads/petalinux-v2023.2-*.run
~/Downloads/petalinux-v2023.2-*.run \
--dir /opt/pkg/petalinux/2023.2
使用Vivado建立硬件平台并导出XSA。 完成综合、实现和bitstream生成,导出时勾选Include bitstream。
Validate Design → Generate Bitstream → Export Hardware
将XSA放入Ubuntu的独立目录。 一个目录只放一份XSA,避免导入错误版本。
mkdir -p ~/DDAQ/00_xsa/hw_20260630
cp ~/DDAQ/00_xsa/PL2SSD20260630.xsa \
~/DDAQ/00_xsa/hw_20260630/
sha256sum ~/DDAQ/00_xsa/hw_20260630/PL2SSD20260630.xsa
加载PetaLinux 2023.2运行环境。 每次新建终端或重新连接SSH后都要执行。
source /opt/pkg/petalinux/2023.2/settings.sh
第一次使用时创建PetaLinux工程。 本项目为Zynq UltraScale+ MPSoC,模板选择zynqMP。
cd ~/DDAQ/01_petalinux
petalinux-create -t project --template zynqMP -n ddaq_linux
向PetaLinux工程导入XSA。 配置界面出现后保存并退出;以后更新XSA时无需重新创建工程。
cd ~/DDAQ/01_petalinux/ddaq_linux
petalinux-config \
--get-hw-description="$HOME/DDAQ/00_xsa/hw_20260630"
配置Linux内核。
petalinux-config -c kernel
配置rootfs。 可使用rootfs菜单添加所需工具。
petalinux-config -c rootfs
配置用户设备树。
nano project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
编译整个PetaLinux工程。 第一次编译时间较长。
petalinux-build
打包生成BOOT.BIN。
petalinux-package --boot \
--fsbl images/linux/zynqmp_fsbl.elf \
--pmufw images/linux/pmufw.elf \
--fpga images/linux/system.bit \
--u-boot \
--force
整理启动文件并记录哈希。 每次测试建立独立目录,便于版本回退。
OUT="$HOME/DDAQ/02_boot/boot_YYYYMMDD_description"
mkdir -p "$OUT"
cp images/linux/BOOT.BIN "$OUT/"
cp images/linux/boot.scr "$OUT/"
cp images/linux/image.ub "$OUT/"
ls -lh "$OUT"
sha256sum "$OUT"/*
制作SD启动卡并进行上板验证。
本文章使用limfx的vscode插件快速发布