1. Linux设备树核心概念解析
设备树(Device Tree)是Linux内核中用于描述硬件配置的一种数据结构,它采用树状结构存储硬件信息,替代了传统的板级支持包(BSP)硬编码方式。我第一次在嵌入式项目中接触设备树是在2015年,当时正从ARM9平台迁移到Cortex-A8平台,发现内核配置方式发生了革命性变化。
设备树的核心价值在于实现了硬件描述与内核代码的分离。举个例子,以前我们要支持新的开发板,需要重新编译内核;而现在只需修改设备树文件(.dts),内核就能自动识别硬件拓扑。这种机制特别适合嵌入式领域,同一个内核镜像配合不同的设备树文件,就能支持多种硬件平台。
设备树文件主要包含三种类型:
- .dts:设备树源文件(人类可读的文本格式)
- .dtsi:设备树包含文件(类似C语言的头文件)
- .dtb:编译后的设备树二进制文件
在项目实践中,我常用这样的命令链处理设备树:
bash复制dtc -I dts -O dtb -o myboard.dtb myboard.dts # 编译
fdtdump myboard.dtb # 调试查看
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 设备树语法深度剖析
2.1 基础结构解析
设备树语法看似简单,但实际使用中有许多需要注意的细节。一个完整的设备树文件通常包含以下结构:
dts复制/dts-v1/; // 版本声明
/ {
model = "My Development Board";
compatible = "vendor,board";
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
compatible = "arm,cortex-a53";
reg = <0>;
};
};
memory@80000000 {
device_type = "memory";
reg = <0x80000000 0x40000000>;
};
};
这里有个容易踩坑的点:#address-cells和`
