Linux 设备树完全解析:什么是 Device Tree 及嵌入式应用指南
什么是 Linux 设备树?一文帮你彻底搞懂
在嵌入式 Linux 开发中,你可能听过“设备树(Device Tree,简称 DT)”这个名词,但真正弄懂它,很多人却还是一头雾水:设备树到底是什么?为什么 Linux 需要它?今天,我们就用大白话来讲清楚。

01
设备树是什么
简单来说,设备树就是一份描述硬件信息的文本或数据结构,它告诉 Linux 内核“我机器上有什么硬件,以及它们是怎么连接的”。
传统做法 vs 设备树
也就是说,设备树让 Linux 内核不用每次为不同硬件重写代码,只要提供一份对应板子的设备树,内核就能识别硬件。

ARMxy 设备树接口示意图
02
设备树的结构
设备树本质上是一颗树状结构,每个节点描述一种硬件或硬件功能。
节点(Node):硬件组件,比如 UART、I2C、GPIO
属性(Property):硬件信息,比如地址、中断号、时钟频率
示例:UART 节点
uart0: serial@ff180000 { compatible = "arm,pl011", "arm,primecell"; reg = <0x0 0xff180000 0x0 0x1000>; interrupts = <0 29 4>; status = "okay";};通过设备树,内核在启动时就知道 UART0 在哪儿,该用哪个驱动,中断号是多少。
03
设备树的类型和文件
设备树有两种形式:
DTS(Device Tree Source):源文件,人可读,文本格式
DTB(Device Tree Blob):编译后的二进制文件,内核在启动时加载
转换流程
myboard.dts --> dtc 编译器 --> myboard.dtb --> 内核启动时加载
这里的 dtc 是 Device Tree Compiler,用来把 DTS 编译成 DTB。
04
设备树的作用
设备树的作用可以总结为三点:
硬件描述与内核解耦内核不用为每块板子改源码,只要设备树不同,内核一样可用。
驱动自动匹配内核通过
compatible属性自动匹配驱动,启动时就能初始化硬件。支持多板通用不同板子只需不同设备树,通用内核可重复使用,节省维护成本。
05
设备树在实际开发中的角色
1. 嵌入式板子启动
在嵌入式 Linux 启动流程中,Bootloader(比如 U-Boot)会把 DTB 加载到内存,然后 Linux 内核读取设备树初始化硬件。
Bootloader -> Load DTB -> Linux Kernel -> Init hardware
2. 便于外设调试
通过修改设备树属性,可以控制 GPIO、I2C 设备是否启用、调整中断号或地址,而不用重新编译内核。
3. 与 SDK 配合
很多芯片厂商提供 Linux SDK,里面自带标准 DTS 文件,开发者只需按板子修改即可。
06
常见问题解答
of_* 接口访问。 | |
compatible 匹配设备树节点,获取资源。 | |
08
ARMxy 的设备树与丰富 IO,为开发保驾护航
在实际嵌入式开发中,硬件平台的灵活性和开发便利性直接决定项目推进效率。ARMxy 系列工业计算机正是基于这一理念设计:
ARMxy 为每块板子都提供了对应的 设备树(DTS/DTB)文件,开发者无需修改内核源码,即可快速识别 CPU、内存、外设寄存器地址、中断号和时钟信息。通过设备树,Linux 内核能够自动匹配驱动、初始化外设,大幅减少开发调试时间,让开发者可以专注于业务逻辑和应用实现。

| 完整设备树 | ||
| 丰富 IO 接口 | ||
| 设备树 + IO 协同 | ||
| 多场景适用 |

