1. 设备树基础概念与历史沿革
设备树(Device Tree)最初由Open Firmware组织提出,作为一种描述硬件配置的数据结构标准。它的核心价值在于将硬件描述从操作系统内核中解耦出来,使得同一套内核代码能够支持多种硬件平台,而无需为每种硬件编写特定的代码。
在传统嵌入式系统开发中,内核通常需要包含大量针对特定开发板的配置代码。以ARM平台为例,arch/arm/目录下充斥着各种mach-*和plat-*目录,每个目录对应一种开发板的支持代码。这种模式导致内核代码臃肿,且难以维护。设备树的出现彻底改变了这一局面。
设备树采用树状结构描述硬件:
- 每个节点代表一个设备或总线
- 属性描述设备的特性和配置
- 兼容性(compatible)属性决定驱动匹配
- 地址空间通过reg属性定义
2005年PowerPC架构率先全面采用设备树后,这一技术逐渐扩展到ARM、MIPS等其他架构。如今设备树已成为Linux内核支持多平台的基石。
2. 设备树语法与结构解析
2.1 设备树源文件格式
设备树源文件(.dts)采用类C语言的语法:
dts复制/dts-v1/; // 版本声明
/ { // 根节点
node1 { // 子节点
a-string-property = "Hello World";
a-cell-property = <1 2 3 4>;
child-node1 {
first-child-property;
second-child-property = <1>;
};
};
};
关键语法元素包括:
- 节点:用花括号{}定义,可嵌套
- 属性:格式为property-name = value;
- 数值:用尖括号<>表示32位无符号整数数组
- 字符串:用双引号""包裹
- 引用:使用&label引用其他节点
2.2 常用属性详解
compatible属性
这是设备树中最重要的属性,格式为:
dts复制compatible = "manufacturer,model", "generic-driver";
驱动通过此属
