Linux 设备树(二) dtc dts/dtsi dtb的关系

article/2025/10/24 6:43:30

在学习设备树之前,我们先来了解一下跟设备树相关的三个对象,分别是dtc、dts/dtsi、dtb。
dtc:用来编译设备树的工具
dts:设备树描述文件
dtsi:设备树头文件
dtb:编译后的二进制文件

  • dtc设备树编译工具
    dtc是用来编译设备树的工具,就像gcc可以用来编译C语言一样,设备树源文件也需要编译器来对它进行编译,而这个编译器就是dtc。
    dtc工具的源代码在内核根目录下的/scripts/dtc文件夹中,在对应的Makefile中可以看到内核将跟dtc有关的文件都进行编译,最后生成一个可执行程序。
# scripts/dtc makefilehostprogs-y	:= dtc
always		:= $(hostprogs-y)dtc-objs	:= dtc.o flattree.o fstree.o data.o livetree.o treesource.o \srcpos.o checks.o util.o
dtc-objs	+= dtc-lexer.lex.o dtc-parser.tab.o# Source files need to get at the userspace version of libfdt_env.h to compileHOSTCFLAGS_DTC := -I$(src) -I$(src)/libfdtHOSTCFLAGS_checks.o := $(HOSTCFLAGS_DTC)
HOSTCFLAGS_data.o := $(HOSTCFLAGS_DTC)
HOSTCFLAGS_dtc.o := $(HOSTCFLAGS_DTC)
HOSTCFLAGS_flattree.o := $(HOSTCFLAGS_DTC)
HOSTCFLAGS_fstree.o := $(HOSTCFLAGS_DTC)
HOSTCFLAGS_livetree.o := $(HOSTCFLAGS_DTC)
HOSTCFLAGS_srcpos.o := $(HOSTCFLAGS_DTC)
HOSTCFLAGS_treesource.o := $(HOSTCFLAGS_DTC)
HOSTCFLAGS_util.o := $(HOSTCFLAGS_DTC)HOSTCFLAGS_dtc-lexer.lex.o := $(HOSTCFLAGS_DTC)
HOSTCFLAGS_dtc-parser.tab.o := $(HOSTCFLAGS_DTC)# dependencies on generated files need to be listed explicitly
$(obj)/dtc-lexer.lex.o: $(obj)/dtc-parser.tab.h# generated files need to be cleaned explicitly
clean-files	:= dtc-lexer.lex.c dtc-parser.tab.c dtc-parser.tab.h

我们可以在命令行中输入"make dtbs"就可以对设备树文件进行编译
在这里插入图片描述
编译后的设备文件后缀为xxx.dtb
在这里插入图片描述

  • dts/dtsi:设备树源文件

dts是设备树的源文件,驱动开发者需要在dts文件中构造描述板级的设备树,其位置一般位于内核根目录下的/arch/arm/boot/dts(以arm架构为例)。dts编写好之后会用dtc来进行编译,最后会生成dtb二进制文件。

dtsi:设备树头文件
设备树就像C语言,同样可以进行头文件包含。开发者通常会把同一个品牌芯片的共同点提取出来,将相同的代码写成一个头文件供其他文件包含。包含dtsi文件跟C语言的头文件包含用法一样,也是include"xxx.dtsi"
在这里插入图片描述

  • dtb:设备树二进制文件
    dtb是由dts/dtsi被编译后生成的二进制文件,dtb文件是可以被内核解析的文件,所以dtb文件会被烧到系统中,由uboot指定dtb的地址供内核去读取。

下图是dtc、dts/dtsi和dtb的关系
在这里插入图片描述
dts和dtsi源文件会经过dtc编译器编译成dtb二进制文件,dtb文件最后会被放到系统中被内核解析。


http://chatgpt.dhexx.cn/article/o2l8aDh7.shtml

相关文章

dtb如何转换到platform_device

分2步,第一步是首先转换为device_node,第二步device_node转换为platform_device。 第一步 /*** unflatten_device_tree - create tree of device_nodes from flat blob** unflattens the device-tree passed by the firmware, creating the* tree of st…

U-Boot 之一 零基础编译 U-Boot 过程详解、Image 镜像介绍及使用说明、DTB 文件使用说明

最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,在之前的博文 Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具 中详细介绍了嵌入式 Linux 环境,接下来就是实际动手学…

dts、dtb的那些事儿

笔者最近在支持新的案子,过于忙碌,好久没更新了,勿怪。 1、设备树大变革故事 2011年3月17日的ARM Linux邮件列表有封邮件“this whole ARM thing is a fucking pain in the ass”引起了轩然大波,原来是我们的Linux之父Linus Torv…

DBT工具简介

What is DBT 在将数据加载到集中式数据仓库之前,必须对其进行清理、保持一致并根据需要进行组合。换句话说,必须转换数据,这就是我们所谓的 ETL(提取、转换、加载)和 ELT 中的“T”。 这是挖掘数据价值的关键一步。 而…

4.2uboot对设备树的支持——dtb的修改原理

本节说明在uboot中修改dtb的原理。 在uboot中,有一些命令支持对dtb文件进行修改。 当我们想要修改dtb文件时,可以直接修改dts文件,然后编译dts文件生成新的dtb文件,再将新的dtb文件载入设备。 或者,我们也可以在ubo…

DBT是什么

关于DBT DBT 是一种数据转换工作流,可帮助您完成更多工作,同时产生更高质量的结果。您可以使用 dbt 来模块化和集中分析代码,同时还为数据团队提供软件工程工作流中常见的护栏。在将数据模型安全部署到生产环境之前,通过监控和可见…

2.1设备树的规范(dts和dtb)——DTS格式

本节学习设备树的规范。 使用设备树时,需要编写dts文件,然后使用dtc编译dts文件,生成dtb文件。 所以本节分为两部分,第一部分讲解dts格式,第二部分讲解dtb格式。 首先看一下dts文件的布局。 DTS文件布局&#xff0…

关于EMUELC适配各种机型,DTB如何修改教程

很多爱好者留言,都想问关于EMUELC的dtb适配机型问题,这里我就出一个教程,如何修改dtb,然后去适配自己的机型,然后启动 。这里我只是提供方法,具体的调试是需要原理图进行配置。 首先,不管是aml…

DTBO简介

1、DTBO简介 设备树 (DT) 是用于描述“不可发现”硬件的命名节点和属性构成的一种数据结构。操作系统(例如在 Android 中使用的 Linux 内核)会使用 DT 来支持 Android 设备使用的各种硬件配置。硬件供应商会提供自己的 DT 源文件,接下来…

【DTB/DTBO 分区介绍】

如果你的 DTB/DTBO 位于专属的分区(例如 dtb 和 dtbo 分区)中,请使用以下表格结构和头文件格式: 数据结构 dt_table_header 仅适用于 dtb/dtbo 分区;您不能在kernel( image.gz) 末尾处附加此格式。如果您有一个 DTB/D…

2.2设备树的规范(dts和dtb)——DTB格式

本节讲述设备树的dtb格式。 上节讲述了dts格式。回顾上节,在dts文件和dtsi文件中,可以使用C语言的define和include,使用方法和作用也同C语言相同。 编写dts文件后,需要使用dtc工具将dts文件编译成dtb文件。dtc工具可以检查dts文…

「设备树」dtb给内核的两种工作模式

一,传递dtb给内核 对于传统bootloader提供两种工作模式:一是启动加载模式(start loading),一是下载模式(downloading) 工作在启动加载模式时,bootloader会自动执行bootcmd命令&#…

设备树_dtb文件分析

前言:我之前的原计划是没有打算写设备树dtb文件分析,但是情势所迫啊!,学习还是要一步一步来的。 在前面的章节提到过.dts文件以文本方式对系统设备树进行描述,经过Device Tree Compiler(dtc)将dts文件转换成二进制文件…

Linux设备树学习2 - DTB文件格式

一. DTB文件简介 DTB文件是由DTS文件通过dtc命令编译生成的二进制文件。DTS文件不能直接被内核解析,需要编译成DTB文件才可以直接被内核识别并解析使用的。 二. DTB文件内容布局 从上图可以看出,DTB由四个部分组成,分别是struct fdt_header&a…

setUserVisibleHint-- fragment真正的onResume和onPause方法

这个情况仅适合与多个fragment之间切换时统计,而非activity和fragment同时交互,因当时项目为首页4个fargment时长统计,因此适合,经下面网友评论指出,特在这里写出此问题,因最近项目较忙,具体情况…

onCreate与onStart区别,onStart与onResume区别

http://www.cnblogs.com/kofi1122/archive/2011/04/10/2011772.html Activity生命周期之我见 关于Activity生命周期的文章很多,而且大部分也说得很详细,所以作为关于这方面的内容我本来不想多说,但是大家可能跟我之前一样,在看这方…

Flutter BaseWidget 实现onResume、onPause()

熟读唐诗三百首,不会作诗也会吟。——孙洙 最近用Flutter开发的项目算是完成了开发到上线第一阶段了。任何一个项目开始了,若想追求的是更好,那么就需要下功夫对项目用户体验和代码效率深入的研究了。作为用户和产品经理、老板、UI、不懂技术…

Activity生命周期中onStart()和onResume()的区别

Activity生命周期中onStart()和onResume()的区别 在讲onStart()和onResume()的区别之前,必须清楚Activity的四种状态: 1.Running状态:一个新的Activity的启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它…

android Activity的onPause()与onResume()

官方文档地址:http://www.android-doc.com/training/basics/activity-lifecycle/pausing.html#Resume Pause和Resume一个Activity 在一般的app使用中,前台的activity一般是会被视觉组件所遮住的,这就会导致activity的pause。举个例子&#x…

android中onResume、onPause等方法

程序正常启动:onCreate()->onStart()->onResume(); 正常退出:onPause()->onStop()->onDestory() 程序按back 退出: onPause()->onStop()->onDestory(),再进入:onCreate()->onStart()->onResume(); 程序按…