前言
在基于 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/XSA)
FPGA 工程师提供的硬件描述文件(.hdf/.xsa) 包含 FPGA 引脚、外设、时钟等硬件配置,必须导入 Petalinux 工程才能匹配硬件平台。
操作步骤:
- 进入对应工程目录
- 执行命令导入硬件配置文件
- 特殊说明:将
NR_HUB_XCZU11EG_TOP.bit比特流文件放入配置目录
# 示例1:进入NR_HUB工程并导入配置
cd NR_HUB
petalinux-config --get-hw-description=/opt/lwp/petalinux/config
# 示例2:OPT8_HUB工程配置
petalinux-config --get-hw-description=/opt/lwp/petalinux/OPT8_HUB/config
# 示例3:TCC_HUB工程配置
petalinux-config --get-hw-description=/opt/lwp/petalinux/TCC_HUB/config
# 示例4:NR-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 kernel
2.4 根文件系统配置(开启必备工具)
根文件系统配置用于添加系统运行所需的工具,本文需开启i2c-tools和tcpdump:
petalinux-config -c rootfs
配置步骤:
- 进入
Filesystem -> Utilities目录 - 勾选i2c-tools(I2C 调试工具)
- 勾选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: sharemme@30000000 {
reg = <0x0 0x30000000 0x0 0x00200000>;
};
};
// 内核启动参数配置
chosen {
bootargs = "earlycon clk_ignore_unused root=/dev/ram rw cpuidle.off=1";
stdout-path = "serial0:115200n8";
};
};
// 使能UART1串口
&uart1 {
status = "okay";
};
// GEM2网口 RGMII配置
&gem2 {
local-mac-address = [00 0a 35 00 00 01];
status = "okay";
fixed-link{
speed=<1000>;
full-duplex;
};
};
// NAND Flash分区配置
&nand0 {
status = "okay";
arasan,has-mdma;
// 删除默认分区
/delete-node/ partition@0x00000000;
/delete-node/ partition@0x00040000;
/delete-node/ partition@0x00060000;
nand@0 {
reg = <0x0>;
#address-cells = <0x2>;
#size-cells = <0x1>;
/* 30MB for BOOT.BIN */
partition@0 {
label = "BOOT.BIN 40M";
reg = <0x0 0x00000000 0x2800000>;
};
/* 1MB for u-boot env */
partition@1 {
label = "u-boot env 1M";
reg = <0x0 0x02800000 0x00100000>;
};
/* 1MB for u-boot env backup */
partition@2 {
label = "u-boot env backup 1M";
reg = <0x0 0x02900000 0x00100000>;
};
/* 150MB for Image0 */
partition@3 {
label = "NAND Image-0 150M";
reg = <0x0 0x03a00000 0x09600000>;
};
/* 150MB for Image1 */
partition@4 {
label = "NAND Image-1 150M";
reg = <0x0 0x0d000000 0x09600000>;
};
/* 40M for log file */
partition@5 {
label = "log file 40M";
reg = <0x0 0x16600000 0x02800000>;
};
/* 8M for rf data */
partition@6 {
label = "rf data 8M";
reg = <0x0 0x18e00000 0x00800000>;
};
/* 100MB for mnt data */
partition@7 {
label = "mnt data 100M";
reg = <0x0 0x19600000 0x06400000>;
};
/* 32MB for reserved */
partition@8 {
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";
spidev@0x00 {
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 --enable
4.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 系统定制。
4821

被折叠的 条评论
为什么被折叠?



