ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PetaLinux 2025.2在Arty Z7-20上的完整构建与启动指南

PetaLinux 2025.2在Arty Z7-20上的完整构建与启动指南 1. 项目缘起为什么是PetaLinux 2025.2与Arty Z7-20如果你刚拿到一块Xilinx现在是AMD的一部分了的Zynq-7000系列开发板比如Digilent的Arty Z7-20并且想在上面跑一个完整的Linux系统那么PetaLinux工具链几乎是你绕不开的选择。我最近刚用PetaLinux 2025.2在Arty Z7-20上完整走通了一遍流程从Vivado硬件设计到最终生成可启动的镜像文件中间踩了不少坑也总结了一些能让新手快速上手的经验。这篇内容就是为你准备的它不是官方文档的复述而是一个实践者视角的、从零开始的完整搭建指南。Arty Z7-20这块板子性价比很高它搭载了Zynq-7000系列的XC7Z020芯片包含了双核Cortex-A9处理器和一片中等规模的FPGA逻辑资源。对于学习嵌入式Linux、软硬件协同设计来说它是一个非常理想的平台。而PetaLinux 2025.2是AMD Xilinx在2025年发布的最新版本工具它基于Yocto项目专门用于为Xilinx的Zynq、MPSoC等处理器构建嵌入式Linux系统。选择最新版本意味着你能用到最新的内核、驱动和软件包当然也可能遇到一些新版本特有的“特性”。我的目标就是带你避开这些“特性”用最直接的方式在Arty Z7-20上构建并运行起你的第一个PetaLinux系统。整个过程会涉及几个核心工具Vivado用于硬件设计和生成硬件描述文件、PetaLinux用于构建Linux内核、设备树、根文件系统等以及Vitis可选用于开发运行在ARM核上的应用程序。网络上相关的教程很多但信息分散版本混杂。我将以2025.2这个相对较新的版本为主线把各个环节串联起来确保你跟着做就能成功。2. 环境准备安装与配置的魔鬼细节在开始激动人心的构建之前我们必须把地基打牢。工具的安装和初始配置是第一步也是最容易让人打退堂鼓的一步尤其是对于新手。这里我会详细说明每一步的操作意图和可能遇到的坑。2.1 工具链下载与安装决策首先你需要从AMD Xilinx官网下载三个核心工具Vivado Design Suite包含Vitis、PetaLinux Tools和Vitis Unified Software Platform。对于Arty Z7-20XC7Z020我们不需要最庞大的Vivado版本选择Vivado ML Standard Edition或Vivado Design Suite - HLx Editions中的标准版即可这已经包含了我们所需的全部功能。注意强烈建议你下载离线安装包Full Product Installation。在线安装Web Installer在国内网络环境下极不稳定失败率很高。“离线安装petalinux”这个热搜词背后是无数人血与泪的教训。下载虽然耗时但一劳永逸。安装顺序我推荐先安装Vivado它会自带或提示安装Vitis再安装PetaLinux。安装路径绝对不要包含中文或空格。我个人的习惯是在Linux系统如Ubuntu 22.04 LTS下进行所有操作因为PetaLinux对Linux原生支持最好。如果你使用Windows虽然PetaLinux也提供了Windows版本但可能会遇到更多路径和依赖库的问题对于新手我建议在Windows上通过WSL2Windows Subsystem for Linux安装Ubuntu来操作这能规避大量环境问题。安装Vivado时记得勾选安装器件库Install Devices。如果你之前安装过但发现缺少Zynq-7000系列支持就需要用到“vivado补充安装器件库”的功能。在Vivado安装目录下运行/bin/xsetup程序选择“Add Design Tools or Devices”然后按照指引添加即可。2.2 PetaLinux环境配置与依赖解决安装完PetaLinux后并不能直接使用。你需要先“source”它的环境设置脚本。假设你的PetaLinux安装在/opt/pkg/petalinux/2025.2那么每次打开新的终端都需要执行source /opt/pkg/petalinux/2025.2/settings.sh这个命令会设置一系列必要的环境变量比如PETALINUXPATH等。你可以把这条命令加到你的~/.bashrc文件末尾这样每次登录都会自动配置好。接下来是安装系统依赖包。这是构建过程能否顺利的关键。对于Ubuntu系统你需要安装一长串的包。官方文档有列表但根据我的经验以下命令可以覆盖大部分需求sudo apt-get update sudo apt-get install -y gcc g build-essential ncurses-dev xz-utils libssl-dev flex bison libselinux1 gnupg wget git net-tools libncurses5-dev zlib1g-dev libidn11-dev libelf-dev python3 python3-pip python3-pexpect python3-git python3-jinja2 xterm autoconf libtool libtinfo5 texinfo zlib1g-dev gawk chrpath socat cpio python3-venv特别要注意libtinfo5和ncurses相关的包它们关系到menuconfig内核和根文件系统配置界面能否正常显示。如果遇到配置界面乱码或无法打开首先检查这几个包。另一个常见问题是tftp服务。在后续通过以太网启动TFTP boot或更新文件系统时可能会用到。如果你打算使用网络启动调试可以提前安装并配置tftpd-hpa服务。不过对于Arty Z7-20的初学者我们更常使用SD卡启动所以这一步可以暂缓。3. 硬件工程创建从Vivado到.xsa文件PetaLinux需要知道你的硬件具体是什么样子比如处理器配置、外设地址、中断分配等。这些信息包含在一个由Vivado导出的硬件描述文件中。对于PetaLinux 2025.2这个文件是.xsaXilinx Support Archive格式。3.1 在Vivado中搭建最小系统打开Vivado创建一个新项目选择Arty Z7-20的板卡文件Board Files。如果你在Vivado的板卡列表中找不到Arty Z7-20你需要从Digilent官网下载板卡支持包Board Support Package并放入Vivado的data/boards/board_files目录下。创建Block Design这是Vivado的图形化设计入口。从IP Catalog中找到并添加“ZYNQ7 Processing System”这个IP核。双击它进行配置这是整个硬件设计的核心。应用预设配置在Zynq配置界面首先点击“Presets”下拉菜单选择“Arty Z7-20”的预设。这个预设会帮你配置好大部分基础设置如DDR型号MT41K128M16 JT-125、SD卡接口、USB-UART等。这能节省大量时间避免手动配置出错。检查关键配置时钟确认PS端的输入时钟FCLK_CLK0是否已使能并设置为合适的频率如50MHz。预设通常会配置好。DDR确认DDR控制器已使能并选择了正确的型号MT41K128M16。这是系统能运行Linux的内存基础。MIO多功能IO配置查看“MIO Configuration”标签页。这里配置了PS端直接引出的外设如SD卡、USB、以太网、UART等。预设应该已经将SD 0用于SD卡、USB 0、UART 1用于串口调试和以太网GEM 3Arty Z7-20的以太网PHY连接在GEM3正确分配到了对应的MIO引脚。你需要特别确认以太网GEM3是否已启用并且PHY的MDIO接口用于管理PHY芯片也已正确配置。PS-PL接口由于我们初期可能不需要使用FPGA逻辑PL可以暂时保持关闭以简化设计。但如果你后续需要可以在这里使能AXI GP接口等。连接与验证点击“Run Block Automation”让Vivado自动完成Zynq IP核与外部端口的连接。然后点击“Run Connection Automation”让Vivado自动连接时钟和复位信号。最后点击“Validate Design”F6检查设计是否有错误。3.2 生成顶层HDL与硬件描述文件验证通过后在Sources面板中右键点击你的Block Design例如design_1选择“Create HDL Wrapper”。让Vivado自动管理并创建顶层文件。接下来是关键步骤生成比特流Generate Bitstream。这个过程会进行综合、实现和生成最终的FPGA配置文件。对于纯PS处理器系统的设计这个过程很快。生成成功后我们需要导出硬件。在菜单栏选择File - Export - Export Hardware。在弹出窗口中选择“Include bitstream”。因为我们的设计目前只有PS部分比特流内容很简单但包含它是良好实践。导出格式选择“XSA”默认。点击OKVivado会在你的项目目录下例如project_name.runs/impl_1生成一个.xsa文件例如design_1_wrapper.xsa。这个文件包含了我们硬件设计的全部信息是PetaLinux的输入。4. 创建与配置PetaLinux项目拿到.xsa文件后我们就可以转向PetaLinux开始构建软件系统了。4.1 项目初始化与硬件描述导入首先在你喜欢的工作目录下创建PetaLinux项目。项目名字最好能体现你的板和用途比如artyz7_petalinux。source /opt/pkg/petalinux/2025.2/settings.sh petalinux-create --type project --template zynq --name artyz7_petalinux cd artyz7_petalinux接下来将Vivado生成的.xsa文件导入到PetaLinux项目中。假设你的.xsa文件在/home/user/vivado_project/artyz7.runs/impl_1目录下。petalinux-config --get-hw-description/home/user/vivado_project/artyz7.runs/impl_1这个命令会做两件事一是将硬件信息地址映射、外设等导入到项目中二是自动打开PetaLinux项目的顶层配置菜单petalinux-config。这是我们第一次对系统进行全局配置。4.2 顶层系统配置解析弹出的配置界面基于ncurses可能让新手感到困惑。我们重点关注几个关键部分Subsystem AUTO Hardware Settings这里应该已经自动填入了从.xsa文件读取的硬件信息如内存大小、串口设备等。检查一下“Memory Settings”里的“Primary Memory”是否与你的DDR大小一致Arty Z7-20是512MB。“Serial Settings”里确认一下“Primary Serial”是否是ps7_uart_1波特率是否为115200这是Arty Z7-20的默认调试串口配置。Image Packaging ConfigurationRoot filesystem type这是最重要的选择之一。默认可能是INITRAMFS。对于Arty Z7-20我们有SD卡和可选的QSPI Flash因此我推荐选择EXT4 (SD/eMMC/SATA/USB)。这样构建出的根文件系统镜像rootfs.ext4可以直接写入SD卡的第二个分区实现持久化存储。这也是“rfsoc petalinux 将文件系统从flash移出放到emmc上”这个需求的通用思路——将根文件系统放在大容量、可读写的存储介质上。SD/MMC rootfs partition如果你选择了EXT4这里通常保持默认第三分区即可PetaLinux在制作启动镜像时会自动处理。Device node of SD device保持默认/dev/mmcblk0p2对于SD卡。DTG Settings (Device Tree Generator)设备树是Linux内核识别硬件的关键。PetaLinux会根据你的硬件自动生成一个基础设备树.dts文件。我们通常在这里进行一些高级调整比如启用某个外设的驱动。对于Arty Z7-20确保以太网gem3等外设已被正确识别和启用。配置完成后选择 Save 并退出。PetaLinux会根据你的配置更新项目内的配置文件。4.3 内核与根文件系统定制接下来我们可以分别对Linux内核和根文件系统进行更细致的配置。配置Linux内核petalinux-config -c kernel这个界面和配置标准的Linux内核几乎一样。对于初学者大部分选项可以保持默认。但你可以在这里做一些事情搜索并启用特定的驱动模块例如如果你后续添加了自定义的FPGA IP核其驱动可能需要在这里编译成模块M或内建*。调整内核启动参数Boot options-Default kernel command string但通常PetaLinux会自动生成合适的参数。一个实用技巧如果你希望内核启动时包含更多调试信息可以在Kernel hacking中启用Early printk和调整Default log level。配置根文件系统petalinux-config -c rootfs这里你可以选择需要安装到最终根文件系统中的软件包。界面分为“Filesystem Packages”多个子菜单。在user packages里你可以添加一些常用的工具比如openssh用于SSH登录、iperf3网络性能测试、vim编辑器等。在modules里你可以选择自动加载哪些内核模块。对于网络功能确保networking相关的包被选中。配置完成后同样保存退出。5. 构建、部署与启动测试配置全部完成后就可以开始构建整个系统了。这个过程比较耗时取决于你的电脑性能和网络速度因为需要从Yocto服务器下载各种源码包。5.1 执行构建与产物分析在项目根目录下执行构建命令petalinux-build这个过程会依次构建设备树、U-Boot、Linux内核和根文件系统。如果一切顺利最终会在images/linux目录下生成我们需要的所有启动文件。关键文件包括image.ub这是一个FITFlattened Image Tree镜像它可能包含了内核、设备树和根文件系统如果是INITRAMFS方式。对于我们的EXT4 SD卡启动方案它通常只包含内核和设备树。boot.scrU-Boot的脚本文件用于定义启动命令。bl31.elf、u-boot.elfARM Trusted Firmware和U-Boot引导程序。rootfs.ext4EXT4格式的根文件系统镜像。system.dtb设备树二进制文件。zynq_fsbl.elfFirst Stage Bootloader。对于SD卡启动我们通常需要的是boot.bin由fsbl.elf、bitstream.bit和u-boot.elf打包而成、image.ub和rootfs.ext4。PetaLinux提供了一个便捷命令来生成boot.binpetalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --fpga --u-boot images/linux/u-boot.elf--fpga参数后面本应跟比特流文件.bit但如果你在Vivado导出硬件时包含了比特流并且在petalinux-config --get-hw-description时指定了路径PetaLinux通常会自动找到并打包它。如果找不到你需要手动指定--fpga path_to_your_bitstream.bit。执行后会在images/linux下生成boot.bin。5.2 制作SD卡与上电启动准备一张至少8GB的SD卡建议使用Class 10或更高速度的卡。我们将它分成两个分区FAT32分区大约500MB-1GB用于存放boot.bin、image.ub、boot.scr等启动文件。EXT4分区剩余所有空间用于存放根文件系统rootfs.ext4。在Linux下你可以使用fdisk或图形化工具gparted进行分区。假设SD卡设备是/dev/sdb操作前务必用lsblk命令确认设备号误操作会格式化错误磁盘。sudo fdisk /dev/sdb # 在fdisk交互界面中依次输入d (删除现有分区), n (新建分区), p (主分区), 1 (分区号1), 回车 (起始扇区默认), 1G (大小1G), t (修改类型), c (设置为W95 FAT32 (LBA)), n, p, 2, 回车, 回车 (使用剩余所有空间), w (写入并退出)。 sudo mkfs.vfat -F 32 -n boot /dev/sdb1 sudo mkfs.ext4 -L rootfs /dev/sdb2然后挂载这两个分区并复制文件mkdir -p /mnt/boot /mnt/rootfs sudo mount /dev/sdb1 /mnt/boot sudo mount /dev/sdb2 /mnt/rootfs # 复制启动文件到FAT分区 sudo cp images/linux/boot.bin images/linux/image.ub images/linux/boot.scr /mnt/boot/ # 将根文件系统镜像解压到EXT4分区这步较慢 sudo tar -xvf images/linux/rootfs.tar.gz -C /mnt/rootfs/ # 或者如果你生成的是rootfs.ext4可以直接用dd写入但更推荐用tar解压以保持灵活性 # sudo dd ifimages/linux/rootfs.ext4 of/dev/sdb2 bs4M statusprogress sudo umount /mnt/boot /mnt/rootfs将SD卡插入Arty Z7-20的卡槽板子上的JP5跳线设置为“SD”模式参考板卡手册连接串口线USB-UART到电脑使用串口终端工具如minicom、picocom或Windows下的Putty、MobaXterm打开对应的串口如/dev/ttyUSB1波特率设置为115200。给板子上电。你应该会在串口终端看到U-Boot的启动日志接着是Linux内核解压、启动最后出现登录提示符petalinux login:。默认用户名是root密码也是root首次登录后会要求修改。恭喜你你的PetaLinux系统已经在Arty Z7-20上跑起来了5.3 网络功能配置与测试系统启动后一个常见的需求是配置以太网。Arty Z7-20板载了一个以太网PHY。我们需要确保它在设备树中已启用并且Linux内核加载了正确的驱动。首先在PetaLinux项目内检查自动生成的设备树源文件。它位于components/plnx_workspace/device-tree/device-tree/目录下文件名可能是system-user.dtsi或pl.dtsi。你可以查看其中关于gem3以太网控制器的节点配置。PetaLinux通常能根据硬件描述正确生成。如果网络接口eth0没有自动获取IP地址你可以手动配置。在Linux命令行下ifconfig eth0 up udhcpc -i eth0 # 通过DHCP自动获取IP假设你的路由器开启了DHCP # 或者手动配置 ifconfig eth0 192.168.1.100 netmask 255.255.255.0 route add default gw 192.168.1.1然后尝试ping一下网关或外网测试网络连通性。如果网络不通排查步骤包括检查硬件连接和路由器状态。在U-Boot阶段尝试用ping命令测试网络需在U-Boot中配置serverip和ipaddr。这可以排除Linux驱动问题。在Linux下用dmesg | grep eth或dmesg | grep gem查看内核驱动加载和PHY识别是否有错误。检查设备树中gem3节点的phy-mode属性是否正确例如rgmii-id以及phy-handle是否指向了正确的PHY节点。这需要对照Arty Z7-20的原理图和Zynq TRM手册。6. 进阶设备树手动调整与排错指南尽管PetaLinux的DTG设备树生成器很强大但面对特定硬件或复杂需求时手动调整设备树是必不可少的技能。设备树文件.dts或.dtsi是一种描述硬件拓扑和配置的数据结构内核通过它来识别和管理非即插即用的硬件。6.1 设备树文件结构与修改方法在PetaLinux项目中不建议直接修改自动生成的核心设备树文件如system.dts因为它们会在每次petalinux-config或petalinux-build时被覆盖。正确的方法是修改“用户层”的设备树文件它们会被自动并入最终的系统设备树中。主要的用户设备树文件位于project-spec/meta-user/recipes-bsp/device-tree/files/目录下。你可以创建或修改以下文件system-user.dtsi用于添加或覆盖节点。这是最常用的文件。pl-custom.dtsi如果硬件设计中包含可编程逻辑PL部分的IP核其设备树节点通常在这里定义。例如假设我们需要修改以太网PHY的复位引脚配置或者为某个自定义的GPIO LED添加节点。我们可以在system-user.dtsi中添加内容。修改后需要重新构建设备树petalinux-build -c device-tree或者直接执行完整的petalinux-build。6.2 常见设备树问题排查外设无法识别首先确认在Vivado硬件设计中该外设已正确配置并连接且地址分配无冲突。然后检查PetaLinux生成的设备树中该外设的节点是否存在、状态status是否为“okay”、寄存器地址reg属性是否与硬件设计匹配。可以使用dtc工具反编译最终的system.dtb来查看dtc -I dtb -O dts -o system.dts images/linux/system.dtb less system.dts搜索你的外设节点名如gem3。中断不工作检查设备树节点中的interrupts属性值。这个值需要与Vivado中分配的硬件中断号通常是一个数组如0x0 0x3d 0x4对应。Zynq的中断体系比较复杂涉及SPI、PPI等。一个常见的错误是混淆了中断号interrupt number和硬件中断IDIRQ ID。可以参考内核源码中的Documentation/devicetree/bindings/interrupt-controller/文档。时钟或引脚复用问题有些外设需要特定的时钟或引脚复用MIO/EMIO配置。这些信息一部分来自Vivado导出的.xsa文件由DTG处理另一部分可能需要你在设备树中明确指定例如通过clocks和clock-names属性引用时钟节点或通过pinctrl绑定来配置引脚复用组。对于Zynq PS端固定在MIO上的外设如Arty Z7-20的以太网引脚复用通常在Vivado中配置好DTG会自动生成。6.3 调试手段内核日志与/proc/device-tree当系统启动后调试设备树问题主要依靠内核日志和sysfs。dmesg命令查看内核启动和运行过程中的所有日志。使用dmesg | grep -i your_device来过滤特定设备的信息。关注是否有“probe failed”、“cannot get irq”、“clock not found”等错误。/proc/device-tree这是一个内存中的文件系统反映了内核实际解析到的设备树结构。你可以cd到这个目录下用ls和cat命令查看节点和属性。例如cat /proc/device-tree/amba/ethernete000b000/phy-mode可以查看以太网控制器的PHY模式属性。这对于验证设备树是否正确加载非常直观。通过结合硬件设计Vivado、设备树源码和运行时信息你可以逐步定位并解决大部分外设驱动问题。这个过程是嵌入式Linux开发的核心技能之一需要耐心和实践。
返回列表