1. 设备树节点解析基础
设备树(Device Tree)是现代嵌入式Linux系统中描述硬件资源的重要数据结构。它采用树状结构组织硬件信息,通过节点(node)和属性(property)的形式描述SoC外设、总线连接和硬件特性。与传统的硬编码方式相比,设备树实现了硬件描述与内核代码的分离,极大提升了系统移植性和维护效率。
设备树源文件(.dts)经过编译生成二进制格式的设备树blob(.dtb),由bootloader传递给内核。内核解析设备树后,会根据节点信息动态注册平台设备,驱动再通过匹配机制与这些设备绑定。这种机制使得同一内核镜像可以支持不同硬件配置,只需更换对应的dtb文件即可。
1.1 设备树语法精要
设备树语法包含几个核心元素:
- 节点:用
节点名@地址格式定义,根节点为/ - 属性:键值对形式,如
compatible = "vendor,device" - 寻址:通过
reg属性配合#address-cells和#size-cells定义 - 中断:通过
interrupts属性配合interrupt-parent定义
典型节点结构如下:
dts复制/ {
compatible = "acme,board";
#address-cells = <1>;
#size-cells = <1>;
soc {
compatible = "simple-bus";
ranges;
serial@1000 {
compatible = "ns16550";
reg = <0x1000 0x100>;
interrupts = <5>;
};
};
};
1.2 关键属性深度解析
compatible属性是设备匹配的核心依据,遵循"制造商,型号"格式。内核驱动通过of_match_table与该属性匹配,支持多设备兼容时按优先级排列:
dts复制compatible = "ti,lp8556", "ti,lp8555";
reg属性描述设备地址空间,其解析依赖父节点的`#address-cel
