驱动开发:详细分析 DTB、DTS、DTSI、DTBO 的区别、用途及它们之间的关系

一、总体概念:什么是 Device Tree(设备树)?

在 Linux 内核(尤其是 ARM 平台)中,设备树用于描述硬件,而不是写死在内核源码中。

设备树由多种文件组成,每种文件在构建流程中承担不同的作用:

DTS:设备树源文件(Device Tree Source)

DTSI:设备树源的 include 文件(Device Tree Source Include)

DTB:设备树 blob(二进制编译后的文件)

DTBO:设备树 overlay(覆盖/动态修改树结构的文件)

二、各文件区别

1、DTS(Device Tree Source)------ 主设备树源文件

用途:描述一块具体硬件平台(开发板/产品)的设备信息。

格式:文本格式,可读性强。

内容包括:CPU、内存、GPIO、外设节点、引脚复用、电源、传感器

特点:

DTS 通常为每个产品一份

DTS 会 #include 一个或多个 DTSI。

2、DTSI(Device Tree Source Include)------ 设备树的公共模板文件

用途:类似 C 语言的 .h 头文件,供多个 DTS 复用。

作用:把共性硬件结构抽取出来,减少重复代码。

特点:

DTSI 不会单独编译成 DTB

DTS 通过 #include 使用 DTSI。

3、DTB(Device Tree Blob)------ 设备树二进制文件

用途:由 DTS/DTSI 编译而来,供内核在启动时解析。

格式:二进制,不可直接阅读。

加载位置:大多数平台(ARM/AArch64),由 bootloader(如 U-Boot)传递给 kernel,Kernel 在启动早期解析 dtb 并实现硬件初始化。

4、DTBO(Device Tree Overlay)------ 设备树补丁/覆盖文件

用途:对主 DTB 进行动态增量修改,而不是完全替换它。DTBO文件包含了针对基础设备树的增量修改指令。系统在启动时,先将主 DTB 加载到内存中,然后应用一个或多个DTBO文件,在内存中形成一个"合并后"的设备树,再交给内核

典型应用场景:动态插拔模块(扩展板 HAT)、U-Boot 实现可配置硬件、多种外设/配置可选(如改变显示屏型号)

特点:

**动态性:**无需重新编译内核或主设备树,只需在配置文件中加一行,重启即可生效。

**模块化:**每个外设对应一个Overlay文件,管理清晰。你可以同时启用多个Overlay(用空格分隔)。

**非侵入性:**你不会破坏主设备树文件。如果想禁用某个外设,只需从配置中移除该Overlay即可恢复原状。

**可定制性:**高级用户可以自己编写或修改Overlay文件来支持非官方硬件。

相关推荐
BullSmall2 小时前
Test Matrix:测试矩阵(IT 领域定义 + 设计实践 + 华为场景应用)
运维·服务器
liuyao_xianhui2 小时前
版本控制器git--gdb/cgdb
linux·运维·服务器·git
CS_浮鱼2 小时前
【Linux进阶】mmap实战:文件映射、进程通信与LRU缓存
linux·运维·c++·缓存
chuxinweihui2 小时前
应用层协议 HTTP
linux·服务器·网络·网络协议·http
xu_yule3 小时前
Linux_16(多线程)信号量+基于环形队列的生成消费模型+自选锁+读写锁
linux·运维·服务器
eyuiomvtywn3 小时前
阿里云DNS解析Vercel部署项目的域名
运维·服务器·阿里云
4t4run3 小时前
25、Linux 特殊权限
linux·运维
氵文大师4 小时前
A机通过 python -m http.server 下载B机的文件
linux·开发语言·python·http
HUT_Tyne2654 小时前
Linux 快速入门
linux·运维·服务器