PS端的Linux系统制作

在PS端新增了SD、PCIe等接口后,导出.xsa文件。然后通过调研,我找到了AMD官网提供的工具PetalinuxPetalinux 工具是 Xilinx 公司推出的嵌入式 Linux 开发套件,包括了 u-boot、Linux Kernel、device-tree、rootfs 等源码和库,以及 Yocto recipes,可以让客户很方便的生成、配置、编译及自定义 Linux 系统。 这里不使用米联客提供的工具包主要是因为考虑到AMD官网提供的文档更加齐全,出现问题AI可以更好的帮我debug。

Linux启动

本项目采用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等硬件。当前启动文件的作用为:

文件

主要内容与作用

BOOT.BIN

FSBL、PMUFW、bitstream、ATF和U-Boot等启动组件

boot.scr

U-Boot启动脚本,指定如何加载image.ub

image.ub

Linux Kernel、Device Tree和initramfs

PetaLinux环境搭建

  • 虚拟机中安装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后,即可方便地传输文件了。 alt text

  • 开启SSH服务,方便使用 mobaxterm 远程。

    sudo apt install openssh-server
    

    alt text

  • 安装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
    

Petalinux制作系统步骤

  1. 使用Vivado建立硬件平台并导出XSA。 完成综合、实现和bitstream生成,导出时勾选Include bitstream

    Validate Design → Generate Bitstream → Export Hardware
    
  2. 将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
    
  3. 加载PetaLinux 2023.2运行环境。 每次新建终端或重新连接SSH后都要执行。

    source /opt/pkg/petalinux/2023.2/settings.sh
    
  4. 第一次使用时创建PetaLinux工程。 本项目为Zynq UltraScale+ MPSoC,模板选择zynqMP

    cd ~/DDAQ/01_petalinux
    petalinux-create -t project --template zynqMP -n ddaq_linux
    
  5. 向PetaLinux工程导入XSA。 配置界面出现后保存并退出;以后更新XSA时无需重新创建工程。

    cd ~/DDAQ/01_petalinux/ddaq_linux
    petalinux-config \
      --get-hw-description="$HOME/DDAQ/00_xsa/hw_20260630"
    
  6. 配置Linux内核。

    petalinux-config -c kernel
    
  7. 配置rootfs。 可使用rootfs菜单添加所需工具。

    petalinux-config -c rootfs
    
  8. 配置用户设备树。

    nano project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
    
  9. 编译整个PetaLinux工程。 第一次编译时间较长。

    petalinux-build
    
  10. 打包生成BOOT.BIN

    petalinux-package --boot \
      --fsbl images/linux/zynqmp_fsbl.elf \
      --pmufw images/linux/pmufw.elf \
      --fpga images/linux/system.bit \
      --u-boot \
      --force
    
  11. 整理启动文件并记录哈希。 每次测试建立独立目录,便于版本回退。

    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"/*
    
  12. 制作SD启动卡并进行上板验证。


本文章使用limfx的vscode插件快速发布