本篇文档深入浅出地介绍了设备树的基本概念、结构以及编写规则,重点解析了节点与属性的核心作用及其相互关系。
这份设备树规范文档主要介绍并定义了描述硬件配置的数据结构——设备树。最初源自于OpenFirmware IEEE 1275标准的设备树现在广泛应用于嵌入式系统,尤其是在Linux内核支持的平台中。
文档主要内容包括:
- 设备树的基本概念(如节点、属性等)。
- 常用的标准节点类型和属性定义(例如根节点、CPU 节点、memory 节点以及 compatible 属性)。
- 特定设备在设备树中的描述方式,比如中断控制器和总线等。
- 设备之间的连接关系表示方法,尤其是中断的关联说明。
- 扁平化设备树(Flattened Devicetree)二进制格式定义。这是系统运行时实际使用的数据结构形式。
- 设备树源文件(Devicetree Source)的文本格式定义。这是一种编写设备树常用的格式,并可以被编译为扁平化的二进制形式。
该规范提供了一种标准方式来描述硬件配置,使得操作系统内核和固件能够通过统一接口传递有关硬件的信息。这不仅提高了系统的可移植性和兼容性,还简化了板级支持包的开发与维护工作。
### 设备树编写规范详解
#### 一、简介
设备树是一种用于描述嵌入式系统硬件配置的数据结构,最初源自OpenFirmware IEEE 1275标准,并已发展成为Linux内核广泛使用的一种标准。通过设备树,操作系统能够更加方便地获取有关硬件的信息,从而提高系统的可移植性和兼容性。本篇将详细介绍设备树的基本概念、节点类型、属性定义以及文本格式和二进制格式。
#### 二、基本概念
- **节点(Node):** 设备树由多个节点组成,每个代表一个或一组相关的硬件组件。
- 每个节点具有唯一名称用于标识特定的组件,并且有完整的路径名来确定其在设备树中的位置。此外,属性用来描述该节点所表示的硬件的具体特性。
- **标准属性:** 包括`compatible`, `model`, `phandle`, `status`, `#address-cells#size-cells`, `reg`, `virtual-reg`, 和`ranges`等。
- 这些属性定义了设备树的基本结构和行为,例如兼容性、型号信息以及资源分配。
- **中断与映射:** 描述了如何在设备树中表示复杂的中断连接关系。这包括描述硬件组件之间的中断关联规则的属性如 `interrupt-parent`, `interrupts`等。
- 通过具体的示例来详细说明这些概念的应用实例和实现方式。
#### 三、设备节点要求
- **基本类型:** 包括根节点、aliases, memory, chosen, cpus 和cpuscpu* 等。这些类型的定义提供了描述特定硬件组件的基本框架。
- 具体如`compatible`, `model`等属性用于描述CPU核心的特性。
#### 四、设备绑定
- 设备绑定是指在软件层面如何描述具体的硬件设备的方式,本节将讨论一些常见的示例包括串行设备和网络设备以及中断控制器等。
**1. 一般原则:** 设备绑定应当遵循一定的规则以确保一致性和可读性。此外,还可以添加额外属性来进一步细化特定的硬件特性。
**2. 示例:**
- **串口类绑定、National Semiconductor UART兼容要求:** 描述如何在设备树中定义和配置这些类型的串行通信接口。
#### 五、扁平化设备树(DTB)格式
- DTB是系统运行时实际使用的二进制形式,有助于提高启动效率并减少内存占用。
**1. 版本管理:** 定义了DTB的版本号。
**2. 头部信息:** 包括基本元数据如版本号和保留区域。
**3. 内存保留块:** 标记出不能被普通进程访问的特定内存区域,并定义如何在设备树中表示这些保留区域。
#### 六、设备树源码(DTS)格式
- DTS是编写设备树常用的文本形式,便于阅读与编辑。
**1. 编译器指令:** 在DTS文件中可以包含控制编译过程的指令。
**2. 标签和节点属性定义:** 详细描述了如何在DTS文件中标识重要的位置或宏,并规定了节点及属性的具体语法格式。
**3. 文件布局规则:**
#### 总结
设备树作为描述硬件配置的重要工具,在嵌入式系统开发过程中扮演着关键角色。通过深入理解其概念、结构定义以及二进制和文本表示方式,能够更有效地进行系统的开发与维护工作,并且合理的绑定策略也有助于提高性能及稳定性。