深入解析Petalinux下Zynq7000设备树开发:从理论到实战
一、Petalinux工程设备树架构解析
1.1 设备树在嵌入式Linux中的核心地位
在基于Zynq7000的嵌入式系统开发中,设备树(Device Tree)作为硬件描述的核心机制,承担着连接硬件平台与操作系统的桥梁作用。它通过结构化的数据格式,将传统硬件描述从内核代码中解耦出来,实现了硬件配置的灵活性和可维护性。
1.2 Petalinux工程目录结构全景
典型的Petalinux工程目录结构如下:
<project>/
├── project-spec/
│ └── meta-user/
│ └── recipes-bsp/
│ └── device-tree/
│ ├── files/
│ │ ├── system-user.dtsi
│ │ ├── pl.dtsi
│ │ └── pcw.dtsi
│ └── device-tree.bbappend
└── components/
└── plnx_workspace/
└── device-tree/
└── device-tree/
其中关键路径为project-spec/meta-user/recipes-bsp/device-tree/files,该目录存放所有用户自定义设备树文件。
1.3 核心设备树文件解析
1.3.1 system-user.dtsi
- 作用:用户主设备树包含文件
- 内容:
#include "pl.dtsi"
#include "pcw.dtsi"
/ {
chosen {
bootargs = "console=ttyPS0,115200 earlyprintk";
};
memory@0 {
device_type = "memory";
reg = <0x0 0x40000000>;
};
};
1.3.2 pl.dtsi
- 生成方式:由Vivado导出的硬件设计
- 典型内容:
amba_pl: amba_pl@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
ranges ;
axi_gpio_0: gpio@41200000 {
#gpio-cells = <2>;
compatible = "xlnx,xps-gpio-1.00.a";
gpio-controller ;
reg = <0x41200000 0x10000>;
xlnx,all-inputs = <0x0>;
xlnx,all-outputs = <0x1>;
xlnx,dout-default = <0x00000000>;
xlnx,gpio-width = <0x8>;
xlnx,interrupt-present = <0x0>;
xlnx,is-dual = <0x0>;
xlnx,tri-default = <0xFFFFFFFF>;
};
};
1.3.3 pcw.dtsi
- 来源:处理系统(PS)配置生成
- 关键配置项:
- 时钟配置
- 外设地址映射
- 中断控制器设置
- DMA通道配置
1.3.4 system_conf.dtsi
- 文件路径:
project-spec/meta-user/recipes-bsp/device-tree/files/system_conf.dtsi - 核心作用:系统级全局配置定义文件
- 典型内容:
// 系统时钟配置
/ {
clocks {
sys_clk: sys_clk {
#clock-cells = <0>;
clock-frequency = <100000000>; // PS端主时钟
compatible = "fixed-clock";
};
};
};
// 处理器配置
&cpu0 {
operating-points = <
666667 1000000
333334 1000000
>;
clock-latency = <1000>;
};
// 存储设备映射
&qspi {
#address-cells = <1>;
#size-cells = <0>;
flash0: flash@0 {
compatible = "micron,n25q128a13";
reg = <0>;
spi-max-frequency = <50000000>;
};
};
关键配置项说明:
| 配置项 | 作用说明 | 典型值示例 |
|---|---|---|
| clock-frequency | 定义系统主时钟频率 | <100000000> (100MHz) |
| operating-points | CPU动态调频电压曲线 | [频率(Hz), 电压(uV)]对 |
| spi-max-frequency | SPI Flash最大工作频率 | <50000000> (50MHz) |
1.3.5 skeleton.dtsi
- 文件路径:
components/plnx_workspace/device-tree/device-tree/skeleton.dtsi - 特殊作用:设备树基础框架文件(Petalinux自动生成)
- 典型结构:
// 根节点基础定义
/ {
#address-cells = <1>;
#size-cells = <1>;
compatible = "xlnx,zynq-7000";
model = "Xilinx Zynq Platform";
// 默认中断控制器配置
intc: interrupt-controller@f8f01000 {
#interrupt-cells = <3>;
compatible = "arm,cortex-a9-gic";
interrupt-controller;
reg = <0xf8f01000 0x1000>,
<0xf8f00100 0x100>;
};
// 默认内存映射
memory@0 {
device_type = "memory";
reg = <0x0 0x40000000>;
};
};
文件特性说明:
- 自动生成机制:该文件由Petalinux根据硬件设计(XSA文件)自动生成
- 禁止修改规则:用户不应直接修改此文件,修改会被工程重建覆盖
- 覆盖策略:用户自定义配置应通过
system-user.dtsi覆盖默认设置

最低0.47元/天 解锁文章
780

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



