一、设备树
设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(Device Tree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、IIC 接口上接了哪些设备、SPI 接口上接了哪些设备等等。
树的主干就是系统总线,IIC 控制器、GPIO 控制器、SPI 控制器等都是接到系统主线上的分支。
dts文件:用一个专属的文件格式来描述,这个专属的文件就叫做设备树,文件扩展名为.dts。
dtsi文件:同一个 SOC 可以作出很多不同的板子,这些不同的板子肯定是有共同的信息,将这些共同的信息提取出来作为一个通用的文件,这个通用文件的扩展名为dtsi文件。
DTB 是将DTS 编译以后得到的二进制文件。
备注:
一般.dts描述板级信息(也就是开发板上有哪些 IIC 设备、SPI 设备等),.dtsi 描述 SOC 级信息(也就是 SOC有几个CPU、主频是多少、各个外设控制器信息等)。
二、设备树DTS语法
DTS 语法:是一种 ASCII文本文件;
1)设备节点:
设备树是采用树形结构来描述板子上的设备信息的文件,每个设备都是一个节点,叫做设备节点,每个节点都通过一些属性信息来描述节点信息,属性就是键—值对。
label: node-name@unit-address
label:标签,为了方便访问节点,&label实现对指定节点访问。
node-name:节点名称,为ASCII;
unit-address:节点设备的地址或者寄存器地址,如果节点设备没有地址可以不要unit-address。
2)设备树源码中常用的几种数据格式
①.字符串
compatible = “arm,cortex-a7”;
②.32 位无符号整数
reg = <0>;
③.字符串列表
属性值也可以为字符串列表,字符串和字符串之间采用“,”隔开;
compatible = “fsl,imx6ull-gpmi-nand”, “fsl, imx6ul-gpmi-nand”;
3)标准属性
①.compatible属性
compatible 属性也叫做“兼容性”属性,这是非常重要的一个属性!compatible 属性的值是一个字符串列表,compatible 属性用于将设备和驱动绑定起来。
compatible 属性的值格式如下:
manufacturer 表示厂商;
model 一般是模块对应的驱动名字。
②.model 属性
model 属性值也是一个字符串,一般 model 属性描述设备模块信息。
③.status属性
status 属性值也是字符串,字符串是设备的状态信息。
备注状态值:
“okay”:表明设备是可操作的。
“disabled”:表明设备当前是不可操作的,但是在未来可以变为可操作的;
“fail”:表明设备不可操作,设备检测到了一系列的错误,而且设备也不大可能
变得可操作。
④.#address-cells 和#size-cells属性
这两个属性的值都是无符号 32 位整形,#address-cells和#size-cells这两个属
性可以用在任何拥有子节点的设备中,用于描述子节点的地址信息。
#address-cells:决定了子节点reg属性中地址信息所占用的字长(32 位);
#size-cells:决定了子节点 reg 属性中长度信息所占的字长(32 位);
⑤.reg属性
reg 属性的值一般是(address,length),reg 属性一般用于描述设备地址空间资源
信息。
⑥.ranges属性
ranges 是一个地址映射/转换表,ranges 属性每个项目由子地址、父地址和地址
空间长度这三部分组成。
ranges(child-bus-address,parent-bus-address,length):
child-bus-address:子总线地址空间的物理地址,由父节点的#address-cells确定
此物理地址所占用的字长。
parent-bus-address:父总线地址空间的物理地址,同样由父节点的#address-
cells确定此物理地址所占用的字长。
length:子地址空间的长度,由父节点的#size-cells 确定此地址长度所占用的字
长。
备注:ranges 属性值为空值,说明子地址空间和父地址空间完全相同,不需要进
行地址转换。
⑦.name属性
name 属性值为字符串,name 属性用于记录节点名字。