驱动开发:详细分析 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的C++学习——指针
linux·开发语言·c++·学习·算法
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [fs]seq_file
linux·笔记·学习
Jay Chou why did2 小时前
wsl安装完无法进入wsl
linux
石头5303 小时前
Rocky Linux 9.6 docker k8s v1.23.17 kubeadm 高可用部署文档
linux
松涛和鸣3 小时前
49、智能电源箱项目技术栈解析
服务器·c语言·开发语言·http·html·php
凉、介3 小时前
SylixOS 中的 Unix Socket
服务器·c语言·笔记·学习·嵌入式·sylixos
RisunJan3 小时前
Linux命令-ipcs命令(报告进程间通信(IPC)设施状态的实用工具)
linux·运维·服务器
春日见4 小时前
控制算法:PP(纯跟踪)算法
linux·人工智能·驱动开发·算法·机器学习
HABuo4 小时前
【Linux进程(四)】进程切换&环境变量深入剖析
linux·运维·服务器·c语言·c++·ubuntu·centos