Xilinx ZynqMP Petalinux 2019.2 项目创建与配置全流程指南
前言在基于 Xilinx ZynqMP 平台的 FPGA 开发中Petalinux 是构建嵌入式 Linux 系统的核心工具涵盖工程创建、硬件配置、内核裁剪、根文件系统定制、应用开发与编译打包等全流程。本文基于Petalinux 2019.2版本详细记录 ZynQMP 工程从 0 到 1 的完整配置步骤包含环境配置、设备树修改、外设驱动开启、应用程序创建、启动脚本定制等实操内容适用于同平台开发人员参考。一、环境准备与工程基础配置1.1 工作目录与环境变量配置首先进入 Petalinux 工作目录加载 Petalinux 环境变量这是执行所有 Petalinux 命令的前提# 进入工程工作目录 cd /opt/****/petalinux/ # 加载Petalinux 2019.2环境变量路径根据实际安装目录调整 source /opt/pkg/petalinux/2019.2/settings.sh执行成功后终端会显示 Petalinux 版本信息代表环境配置完成。1.2 创建 Petalinux 工程基于 ZynqMP 模板创建多个工程根据项目需求自定义工程名--force参数强制覆盖已存在的同名工程# 基础工程 petalinux-create -t project --template zynqMP --force -n XX_XXX # 自定义工程1 petalinux-create -t project --template zynqMP --force -n OPT8_XXX # 自定义工程2 petalinux-create -t project --template zynqMP --force -n TCC_XXX-t project指定创建工程类型--template zynqMP指定硬件平台为 Zynq UltraScale MPSoC-n指定工程名称1.3 导入硬件描述文件HDF/XSAFPGA 工程师提供的硬件描述文件.hdf/.xsa包含 FPGA 引脚、外设、时钟等硬件配置必须导入 Petalinux 工程才能匹配硬件平台。操作步骤进入对应工程目录执行命令导入硬件配置文件特殊说明将NR_HUB_XCZU11EG_TOP.bit比特流文件放入配置目录# 示例1进入NR_HUB工程并导入配置 cd NR_HUB petalinux-config --get-hw-description/opt/lwp/petalinux/config # 示例2OPT8_HUB工程配置 petalinux-config --get-hw-description/opt/lwp/petalinux/OPT8_HUB/config # 示例3TCC_HUB工程配置 petalinux-config --get-hw-description/opt/lwp/petalinux/TCC_HUB/config # 示例4NR-HUBLWP工程配置需提前放入bit文件 # 前置操作将 NR_HUB_XCZU11EG_TOP.bit 复制到 /opt/xxx/petalinux/NR-HUBLWP/config petalinux-config --get-hw-description/opt/lwp/petalinux/NR-HUBLWP/config/opt/lwp/petalinux/config为 HDF/XSA 硬件文件统一存放路径根据实际调整执行命令后会弹出图形化配置界面直接保存退出即可完成硬件导入二、工程核心配置U-Boot / 内核 / 根文件系统导入硬件后需要对工程、U-Boot、Linux 内核、根文件系统进行定制化配置。2.1 工程全局配置# 进入工程图形化配置界面 petalinux-config配置完成后务必保存配置所有工程均需执行此操作。2.2 U-Boot 配置U-Boot 是嵌入式 Linux 的引导程序配置硬件初始化、启动参数等petalinux-config -c u-boot根据硬件需求配置串口、启动介质、网络等参数保存退出。2.3 Linux 内核配置petalinux-config -c kernel2.4 根文件系统配置开启必备工具根文件系统配置用于添加系统运行所需的工具本文需开启i2c-tools和tcpdumppetalinux-config -c rootfs配置步骤进入Filesystem - Utilities目录勾选i2c-toolsI2C 调试工具勾选tcpdump网络抓包工具保存配置并退出三、设备树DTS配置核心外设驱动设备树是 Linux 内核识别硬件外设的关键所有外设串口、网口、NAND、SD 卡、SPI、共享内存等均通过设备树配置。3.1 设备树文件路径Petalinux 用户自定义设备树文件路径project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi直接编辑该文件添加外设配置。3.2 完整设备树配置代码以下配置包含共享内存、启动参数、串口、网口、NAND Flash、SD 卡、SPI等外设直接复制替换即可/include/ system-conf.dtsi / { // 共享内存配置AXI reserved-memory reserved-memory { #address-cells 2; #size-cells 2; ranges; sharememory_reserved: sharemme30000000 { reg 0x0 0x30000000 0x0 0x00200000; }; }; // 内核启动参数配置 chosen { bootargs earlycon clk_ignore_unused root/dev/ram rw cpuidle.off1; stdout-path serial0:115200n8; }; }; // 使能UART1串口 uart1 { status okay; }; // GEM2网口 RGMII配置 gem2 { local-mac-address [00 0a 35 00 00 01]; status okay; fixed-link{ speed1000; full-duplex; }; }; // NAND Flash分区配置 nand0 { status okay; arasan,has-mdma; // 删除默认分区 /delete-node/ partition0x00000000; /delete-node/ partition0x00040000; /delete-node/ partition0x00060000; nand0 { reg 0x0; #address-cells 0x2; #size-cells 0x1; /* 30MB for BOOT.BIN */ partition0 { label BOOT.BIN 40M; reg 0x0 0x00000000 0x2800000; }; /* 1MB for u-boot env */ partition1 { label u-boot env 1M; reg 0x0 0x02800000 0x00100000; }; /* 1MB for u-boot env backup */ partition2 { label u-boot env backup 1M; reg 0x0 0x02900000 0x00100000; }; /* 150MB for Image0 */ partition3 { label NAND Image-0 150M; reg 0x0 0x03a00000 0x09600000; }; /* 150MB for Image1 */ partition4 { label NAND Image-1 150M; reg 0x0 0x0d000000 0x09600000; }; /* 40M for log file */ partition5 { label log file 40M; reg 0x0 0x16600000 0x02800000; }; /* 8M for rf data */ partition6 { label rf data 8M; reg 0x0 0x18e00000 0x00800000; }; /* 100MB for mnt data */ partition7 { label mnt data 100M; reg 0x0 0x19600000 0x06400000; }; /* 32MB for reserved */ partition8 { label reserved 22M; reg 0x0 0x1fa00000 0x01600000; }; }; }; // SD卡1配置 sdhci1 { status okay; max-frequency 50000000; no-1-8-v; disable-wp; }; // SPI0配置用户态SPI驱动 spi0 { status okay; spidev0x00 { buswidth 32; compatible spidev; status okay; reg 0; spi-max-frequency 25000000; }; };3.3 SPI 内核驱动开启设备树配置 SPI 后需要在内核中开启 SPI 用户态驱动支持执行内核配置命令petalinux-config -c kernel进入路径Device Drivers - SPI support勾选User mode SPI device driver support保存配置退出四、应用程序与启动脚本创建Petalinux 支持创建 C 语言应用、安装型脚本用于定制系统功能。4.1 创建 C 语言应用程序创建 C 语言模板应用默认自动编译并集成到 rootfs# 基础应用 petalinux-create -t apps --template c -n myapp --enable # SPI测试应用 petalinux-create -t apps --template c -n spidev-test --enable # SPI工具应用 petalinux-create -t apps --template c -n spitools --enable应用存放路径PROJECT/project-spec/meta-user/recipes-apps/--enable默认开启编译自动打包到系统4.2 创建安装型启动脚本 / 工具创建安装型应用用于启动脚本、bin 文件、shell 脚本部署# 系统启动脚本 petalinux-create -t apps --template install -n startup --enable # si5383时钟配置脚本 petalinux-create -t apps --template install -n si5383 --enable # GPIO控制脚本 petalinux-create -t apps --template install -n gpio --enable # 重启控制脚本 petalinux-create -t apps --template install -n reboot --enable # SFP模块配置脚本 petalinux-create -t apps --template install -n sfp --enable4.3 部署自定义 Bin/Shell 脚本以gpio脚本为例将预编译的 bin 文件或 shell 脚本部署到系统脚本存放路径PROJECT/project-spec/meta-user/recipes-apps/gpio/files/将自定义gpio脚本替换该目录下的默认文件编译后脚本会自动拷贝到系统/usr/bin/目录可直接执行五、工程编译与镜像打包配置完成后执行编译生成 Linux 镜像再打包生成启动文件BOOT.BIN。5.1 编译 Linux 系统镜像# 全编译工程生成image.ub、内核、U-Boot等文件 petalinux-build编译时间根据电脑配置而定编译成功后输出文件在images/linux/5.2 打包 BOOT.BIN 启动文件进入镜像目录将 FSBL、U-Boot、PMUFW、FPGA 比特流打包为启动文件# 进入镜像输出目录 cd images/linux # 打包命令当前目录存在bit文件 petalinux-package --boot --format BIN --fsbl zynqmp_fsbl.elf --u-boot u-boot.elf --pmufw pmufw.elf --fpga *.bit --force # 打包命令bit文件在上级目录 petalinux-package --boot --format BIN --fsbl zynqmp_fsbl.elf --u-boot u-boot.elf --pmufw pmufw.elf --fpga ../../*.bit --force--force强制覆盖已存在的 BOOT.BIN最终生成的BOOT.BIN和image.ub为系统启动核心文件烧录至开发板即可运行六、总结本文完整梳理了Petalinux 2019.2基于 ZynqMP 平台的工程开发全流程核心要点如下环境配置与工程创建是基础必须正确导入 FPGA 硬件描述文件设备树是外设驱动的核心需根据硬件平台精准配置内核、U-Boot、根文件系统按需裁剪开启必备工具与驱动自定义应用与脚本可快速扩展系统功能编译打包后生成的 BOOT.BIN 和 image.ub 为最终启动镜像。本流程适用于 Xilinx Zynq UltraScale 系列 FPGA 的 Linux 系统开发可根据实际项目硬件调整配置参数快速完成嵌入式 Linux 系统定制。