1. 设备树基础概念解析
设备树(Device Tree)是现代嵌入式系统中用于描述硬件配置的重要数据结构。它以一种与平台无关的方式,将系统中的硬件信息组织成树状结构,供操作系统内核在启动时解析和使用。这种描述方式最初由Open Firmware提出,现已成为ARM、PowerPC等架构的标准硬件描述方法。
在设备树源文件(.dts)中,每个节点代表一个硬件设备或功能模块。节点之间通过父子关系形成层次结构,根节点位于最顶层,下面依次是CPU、内存控制器、外设等子节点。每个节点包含若干属性,用于描述该设备的特性和配置。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 地址与大小单元格的核心作用
2.1 #address-cells与#size-cells的定义
#address-cells和#size-cells是设备树中用于描述地址和大小表示方式的元属性。它们决定了reg属性中地址和长度字段的组成方式:
- #address-cells:定义地址字段占用的32位单元(cell)数量
- #size-cells:定义大小/长度字段占用的32位单元数量
这两个属性通常出现在内存映射设备的父节点中,用于规范其子节点的地址表示方式。例如:
code复制soc {
#address-cells = <1>;
#size-cells = <1>;
serial@101f0000 {
compatible = "arm,pl011";
reg = <0x101f0000 0x1000>;
};
}
2.2 典型配置场景分析
不同硬件架构和地址空间需要不同的单元格配置:
-
32位系统常见配置:
- #address-cells = <1>:地址用1个32位数表示(4GB地址空间)
- #size-cells = <1>:大小用1个32位数表示
-
64位系统或大地址空间:
- #address-cells = <2>:地址用2个32位数表示
- #size-cells = <2>:大小用2个32位数表示
-
无地址空间设备:
- #size-cells = <0>:当设备不需要地址范围时使用
重要提示:同一总线上的设备必须使用
