设备树(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. 工作原理(流程简化)

  1. 开发板厂商写好设备树(或提供 .dtb 文件)

  2. Bootloader(如U-Boot)在启动时加载并传给 Linux 内核

  3. Linux 内核解析设备树,初始化对应的驱动程序

  4. 驱动程序通过设备树中的参数进行注册和配置


📌 4. 设备树的组成

  • .dts:设备树的主文件,定义具体硬件(如特定开发板)

  • .dtsi:包含文件,定义通用硬件资源(如 CPU、通用外设)

  • .dtb:设备树的二进制版本,给内核使用


📌 5. 设备树的好处

好处

说明

解耦

内核和硬件信息分离,内核更通用

可维护

增加新硬件只需添加/修改 .dts 文件

动态配置

可以在不改内核的前提下支持新设备


📌 6. 常见平台支持

设备树广泛用于以下平台:

  • ARM Cortex-A 系列(如 RK3566、Allwinner、i.MX)

  • RISC-V

  • 一些 MIPS 系统

  • 不适用于 x86(因其使用 ACPI 而非设备树)


💎 7. 总结

设备树是系统启动时告诉 Linux 内核“我是谁、我有啥硬件”的一本说明书。


调试开发板、移植驱动或修改硬件参数,几乎一定会接触设备树。