驱动开发:详细分析 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文件来支持非官方硬件。

相关推荐
深紫色的三北六号1 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI2 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行2 天前
Linux和window共享文件夹
linux
Sinclair2 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
木心月转码ing3 天前
WSL+Cpp开发环境配置
linux
Rockbean3 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
茶杯梦轩4 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
崔小汤呀4 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应4 天前
vi编辑器使用
linux·后端·操作系统