设备树学习系列 2 ——设备树文件 DTS

本文详细介绍了设备树DTS、DTSI、DTC和DTB的概念及其关系。DTS是ASCII文本格式,描述硬件资源,DTSI用于代码复用,DTC编译DTS成DTB,供内核使用。DTS文件包括根节点、内存预留和属性定义等元素,是设备配置的关键部分。
摘要由CSDN通过智能技术生成


一、DTS 、DTSI、DTC 和 DTB

学习设备树的时候,常常能够看到 DTS、DTSI、DTC 和 DTB 这4个词的身影。我们使用设备树描述硬件资源时,主要是与 DTS 打交道,为了适配某块单板,我们需要修改 DTS 文件(设备树源文件),然后通过 DTC(设备树编译器) 编译成 DTB(设备树二进制文件) 给内核使用,这三者之间的关系如下:
在这里插入图片描述


1. DTS 和 DTSI
DTS 指的是设备树源文件,以 “.dts” 为后缀,我们需要修改设备树文件时,一般就是修改这个 DTS 文件。DTS 是一种 ASCII 文本,用来描述设备树上的硬件资源,一般来说,对于每块单板,都有一个 对与之应的 DTS 文件用来描述该单板的板载硬件资源。

使用同一个 SOC ,可以设计千千万不同的单板,虽然每块单板的设计不同,但是不同的单板中肯定有用到相同的 SOC 资源,例如都使用了 SOC 的某个串口,某个 SPI 接口,某个 IIC 接口等等。那么这些单板所对应的 DTS 文件中,势必会有许多的相同之处,为了减少代码的冗余,我们可以将这些共同的部分单独抽取出来,保存在一个 “.dtsi” 后缀的文件里,需要使用到这些资源的 DTS 文件,直接 include 这个 “.dtsi” 文件就行,这个以 “.dtsi” 为后缀名的文件就是 DTSI 文件。

DTSI 文件类似C语言的头文件,除了 DTS 文件中可以使用 include 包含所需的 DTSI 文件外, DTSI 文件本身也还可以包含其他的 DTSI 文件。


2. DTC
DTC 指的是设备树的编译工具,用于将 DTS 文件编译成二进制格式的 DTB 文件,内核加载的就是 DTB 文件,而不是我们常常修改的 DTS 文件。


3. DTB
前面说了,DTB 是DTC 编译 DTS 文件后生成的二进制文件,以 “.dtb” 为后缀,bootloader在引导内核时,会预先读取*.dtb到内存,进而由内核解析。

关于 DTB 文件,官方文档中的 FLATTENED DEVICETREE (DTB) FORMAT 章节有详细的讲解。


二、DTS 的格式

DTS 以 “.dts” 为后缀名,其格式如下:

/dts-v1/;
[memory reservations]
/ {
		[property definitions]		//根节点属性
		[child nodes]				//子节点
};

1. /dts-v1/
DTS 文件版本,表明这是 version 1 的 DTS 文件,注意后面以分号结尾。如果 DTS 文件中没有这一项,则会被设备树编译器 DTC 认为是过时的 version 0,对于整形数据 integers ,这两个版本在格式有点差异。

2. [memory reservations]
memory reservations 该项使用 [ ] 括住,表明该项是可选项,可以忽略,可要可不要,用于指定一段不让内核使用的内存,格式如下:

/memreserve/ <address> <length>;

address:指定需要保留的内存的起始地址
length:指定需要保留内存的长度

address 和 length 都是 64-bit C-style integers 。

通过上述语句指定某块内存后,内核就不能再使用那块内存了,你可以把这块指定的内存区域想象成自己家的自留地,可以拿来做一些自己喜欢的事情。

3. /{ };
设备树根节点 root node,DTS 支持 C 语言包含头文件的语法,C 语言的注释在 DTS 中也同样适用,我们可以使用 " /* */" 和 " // " 来添加注释。


三、DTS 的基本框架

我们可以看到,设备树文件 DTS 其实很简单,主要是由节点和属性构成。节点分为根节点和子节点,根节点中有若干子节点,子节点中也可以有其自己的子节点;而属性则是有键值对组成,用来描述节点的属性,根节点有属性,子节点也有自己的属性,这些属性可以是设备树定义的标准属性,也可以是用户自定义的属性。

现在,我们大概了解到了设备树文件 DTS 是什么,DTS 里面有什么,可以简单地描绘一下 DTS 文件的框架,如下:

/{
	//根节点属性
	子节点1
	{
		//子节点属性
		子节点的子节点
		{

		};
	};

	......
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值