关于赛灵思的petalinux zynqmp.dtsi文件的理解
在赛灵思(Xilinx)的Petalinux开发流程中,zynqmp.dtsi
是描述Zynq UltraScale+ MPSoC(以下简称ZynqMP)片上外设(如CPU、内存控制器、GPIO、UART、SPI等)的核心设备树片段(Device Tree Snippet)。它的生成与Petalinux对硬件平台的抽象、Vivado硬件设计的集成密切相关,主要涉及以下几个关键步骤:
1. 硬件平台的基础定义
ZynqMP的硬件设计通常基于Vivado完成,用户会在Vivado中实例化ZynqMP的PS(Processing System)子系统,并配置其外设(如启用UART、GPIO、I2C等)。Vivado会根据这些配置生成硬件平台描述文件(.hdf
或.xsa
文件,即Hardware Design Archive),其中包含了PS外设的详细参数(如寄存器地址、中断号、时钟频率等)。
Petalinux的开发依赖于这一硬件平台描述文件。当用户在Petalinux中导入或创建一个新的硬件平台时(通过 petalinux-create -t project -s <xsa_file>
),Petalinux会解析.xsa
文件中的PS配置信息,作为生成设备树的基础。
2. Petalinux的设备树生成逻辑
Petalinux的设备树生成是一个分层合并的过程,核心目标是将硬件平台的物理信息(来自Vivado)与软件配置(来自用户自定义)结合,最终生成完整的设备树(.dts
)。zynqmp.dtsi
是这一过程中由Petalinux自动生成的基础平台设备树片段,主要负责描述ZynqMP的片上外设结构。
关键生成步骤:
步骤1:提取PS外设信息
Petalinux通过解析.xsa
文件中的PS配置,提取ZynqMP的CPU核心、总线(如AXI)、内存控制器(如DDR)、外设接口(如UART、GPIO、SPI、I2C、Ethernet等)的硬件参数。例如:- UART的基地址、中断号、时钟源;
- GPIO的引脚映射、中断极性;
- 以太网控制器的PHY接口类型(RGMII/RMII)等。
步骤2:生成基础设备树片段(zynqmp.dtsi)
Petalinux内置了针对ZynqMP的设备树模板(位于Petalinux安装目录的components/plnx_workspace/devicetree
或类似路径),会根据.xsa
中的PS配置填充模板中的占位符,生成zynqmp.dtsi
。(注:实际路径可能因Petalinux版本略有差异,部分版本的
zynqmp.dtsi
由Petalinux自动生成后,会被合并到system-user.dtsi
或zynqmp.dts
中。)步骤3:合并用户自定义配置(system-user.dtsi)
Petalinux允许用户通过system-user.dtsi
(位于<project_dir>/project-spec/meta-user/recipes-bsp/device-tree/files/
)添加或覆盖设备树节点。用户自定义的内容(如新增外设、修改中断优先级、调整时钟频率)会与zynqmp.dtsi
中的基础配置合并,最终生成完整的设备树。
3. 设备树的编译与验证
Petalinux在构建镜像时(执行petalinux-build
),会调用设备树编译器(dtc
)将.dts
文件编译为二进制格式(.dtb
),并嵌入到最终的Linux内核镜像(Image
)或设备树blob(system-user.dtb
)中。
用户可以通过以下命令查看生成的设备树内容:
dtc -I fs /proc/device-tree # 查看运行时的设备树
# 或直接反编译生成的dtb文件:
dtc -I dtb -o zynqmp.dts <path_to_system-user.dtb>
4. 关键注意事项
- zynqmp.dtsi的不可变性:
zynqmp.dtsi
由Petalinux根据.xsa
自动生成,不建议手动修改。用户自定义的外设或配置应通过system-user.dtsi
实现,避免重新生成Petalinux工程时被覆盖。 - 硬件平台(.xsa)的决定性作用:
zynqmp.dtsi
的内容直接依赖于Vivado生成的.xsa
文件。如果修改了Vivado中的PS配置(如启用新的外设或调整地址映射),需要重新生成.xsa
并在Petalinux中更新硬件平台(petalinux-config -c hardware
),才能触发zynqmp.dtsi
的重新生成。 - 设备树节点的继承关系:ZynqMP的设备树遵循Linux设备树规范,
zynqmp.dtsi
会继承来自上游(如zynqmp.dts
)的通用节点,并覆盖或扩展片上外设的具体配置。
总结
zynqmp.dtsi
是Petalinux基于Vivado生成的硬件平台描述(.xsa
),结合ZynqMP的片上外设模板自动生成的设备树片段,主要用于描述ZynqMP的PS子系统硬件结构。用户自定义外设需通过system-user.dtsi
实现,以避免工程重建时被覆盖。理解这一流程有助于高效调试硬件配置和优化设备树。