设备树(Device Tree)是一种用于描述硬件设备信息的数据结构,广泛用于嵌入式系统,特别是在 Linux 内核中,比如在 ARM、RISC-V 等架构的系统中。
📌 1. 设备树的核心作用
设备树的主要作用是:
在系统启动时,向操作系统(特别是内核)传递平台硬件信息,使内核不需要写死具体的硬件细节代码。
📌 2. 它长什么样?
设备树源文件一般以 .dts(Device Tree Source)和 .dtsi(Device Tree Source Include)为后缀,最终会被编译成 .dtb(Device Tree Blob)二进制格式由引导加载器(如 U-Boot)传给内核。
例如,一个简单的设备树片段:
uart0: serial@10000000 {
compatible = "ns16550a";
reg = <0x10000000 0x100>;
interrupt-parent = <&intc>;
interrupts = <5>;
clock-frequency = <24000000>;
};
这个片段表示一个串口设备(UART):
compatible表示这个设备与哪个驱动匹配reg表示寄存器地址范围interrupts表示中断号clock-frequency表示时钟频率
📌 3. 工作原理(流程简化)
开发板厂商写好设备树(或提供 .dtb 文件)
Bootloader(如U-Boot)在启动时加载并传给 Linux 内核
Linux 内核解析设备树,初始化对应的驱动程序
驱动程序通过设备树中的参数进行注册和配置
📌 4. 设备树的组成
.dts:设备树的主文件,定义具体硬件(如特定开发板).dtsi:包含文件,定义通用硬件资源(如 CPU、通用外设).dtb:设备树的二进制版本,给内核使用
📌 5. 设备树的好处
📌 6. 常见平台支持
设备树广泛用于以下平台:
ARM Cortex-A 系列(如 RK3566、Allwinner、i.MX)
RISC-V
一些 MIPS 系统
不适用于 x86(因其使用 ACPI 而非设备树)
💎 7. 总结
设备树是系统启动时告诉 Linux 内核“我是谁、我有啥硬件”的一本说明书。
调试开发板、移植驱动或修改硬件参数,几乎一定会接触设备树。