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

相关推荐
HLC++11 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室13 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
白露与泡影13 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
神奇霸王龙14 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码14 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress
groundhappy15 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕16 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫17 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
国科安芯17 小时前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信
栩栩云生17 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程