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

设备树是嵌入式系统中用于描述硬件配置的重要工具。dtc是设备树编译器,用于将dts(设备树源文件)和dtsi(设备树头文件)编译成dtb(设备树二进制文件)。dts文件包含了板级设备的具体描述,dtsi则常用于代码复用。dtb文件最终被烧录到系统中,供内核解析使用。在内核源码中,dtc的编译过程在scripts/dtc目录下进行,通过'makedtbs'命令可完成编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  • dtc设备树编译工具
    dtc是用来编译设备树的工具,就像gcc可以用来编译C语言一样,设备树源文件也需要编译器来对它进行编译,而这个编译器就是dtc。
    dtc工具的源代码在内核根目录下的/scripts/dtc文件夹中,在对应的Makefile中可以看到内核将跟dtc有关的文件都进行编译,最后生成一个可执行程序。
# scripts/dtc makefile

hostprogs-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 compile

HOSTCFLAGS_DTC := -I$(src) -I$(src)/libfdt

HOSTCFLAGS_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文件最后会被放到系统中被内核解析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值