驱动开发:详细分析 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---基本指令
linux·运维·服务器
REDcker2 小时前
Linux信号机制详解 POSIX语义与内核要点 sigaction与备用栈实践
linux·运维·php
cui_ruicheng3 小时前
Linux进程间通信(三):System V IPC与共享内存
linux·运维·服务器
蚰蜒螟3 小时前
深入 Linux 内核同步机制:从 futex 到 spinlock 的完整旅程
linux·windows·microsoft
运维全栈笔记3 小时前
Linux安装配置Tomcat保姆级教程:从部署到性能调优
linux·服务器·中间件·tomcat·apache·web
dllmayday4 小时前
Linux 上用终端连接 WiFi
linux·服务器·windows
ACP广源盛139246256734 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
峥无5 小时前
Linux系统编程基石:静态库·动态库·ELF文件·进程地址空间全景图
linux·运维·服务器
用户2367829801686 小时前
从 chmod 755 说起:Unix 文件权限到底是怎么算的?
linux
Strugglingler6 小时前
【systemctl 学习总结】
linux·systemd·systemctl·journalctl·unit file