设备树是节点和属性的简单树结构。属性是键值对,节点可以同时包含属性和子节点。
1.节点与属性
单个根节点:”/"
几个子节点:“”和”node1node2"
节点 1 的几个子节点:“” 和”child-node1child-node2"
一堆属性散落在树中。
属性是简单的键值对,其中值可以为空或包含任意字节流。虽然数据类型未编码到数据结构中,但可以在设备树源文件中表示一些基本数据表示形式。
文本字符串(以 null 结尾)用双引号表示:
string-property = "a string";
“单元格”是 32 位无符号整数,由尖括号分隔:
cell-property = <0xbeef 123 0xabcd1234>;
二进制数据用方括号分隔:
binary-property = [0x01 0x23 0x45 0x67];
不同表示形式的数据可以使用逗号连接在一起:
mixed-property = "a string", [0x01 0x23 0x45 0x67], <0x12345678>;
逗号也用于创建字符串列表:
string-list = "red fish", "blue fish";
2.一般.dts描述板级信息(也就是开发板上有哪些IIC设备、SPI设备等),.dtsi描述SOC级信息(也就是
SOC有几个CPU、主频是多少、各个外设控制器信息等)。
3.在.dts设备树文件中,可以通过“#include”来引用.h、.dtsi和.dts文件。
4. 上述命令并不是“node-name@unit-address”这样的格式,而是用“:”隔开成了两部分,“:”前面的是节点标签(label),“:”后面的才是节点名字,格式如下所示:
label: node-name@unit-address
引入label的目的就是为了方便访问节点,可以直接通过&label来访问这个节点,比如通过&cpu0就可以访问“cpu@0”这个节点,而不需要输入完整的节点名字
5. 1、compatible属性
compatible属性也叫做“兼容性”属性,这是非常重要的一个属性!compatible属性的值是一个字符
串列表,compatible属性用于将设备和驱动绑定起来。字符串列表用于选择设备所要使用的驱动
程序,compatible属性的值格式如下所示:
"manufacturer,model"
其中manufacturer表示厂商,model一般是模块对应的驱动名字。比如imx6ull-alientek-emmc.dts
中sound节点是I.MX6U-ALPHA开发板的音频设备节点,I.MX6U-ALPHA开发板上的音频芯片采用
的欧胜(WOLFSON)出品的WM8960,sound节点的compatible属性值如下:
compatible = "fsl,imx6ul-evk-wm8960","fsl,imx-audio-wm8960";
属性值有两个,分别为“fsl,imx6ul-evk-wm8960”和“fsl,imx-audio-wm8960”,其中“fsl”表示厂商是飞
思卡尔,“imx6ul-evk-wm8960”和“imx-audio-wm8960”表示驱动模块名字。sound这个设备首先使
用第一个兼容值在Linux内核里面查找,看看能不能找到与之匹配的驱动文件,如果没有找到的话就使用第二个兼容值查。
6. 一般驱动程序文件都会有一个OF匹配表,此OF匹配表保存着一些compatible值,如果设备节点的compatible属性值和OF匹配表中的任何一个值相等,那么就表示设备可以使用这个驱动。
7. #address-cells、#size-cells
这两个属性的值都是无符号32位整形,#address-cells和#size-cells这两个属性可以用在任何拥有
子节点的设备中,用于描述子节点的地址信息。
#address-cells属性值决定了子节点reg属性中地址信息所占用的字长(32位),#size-cells属性值决
定了子节点reg属性中长度信息所占的字长(32位)。
#address-cells和#size-cells表明了子节点应该如何编写reg属性值,一般reg属性都是和地址有关的
内容,和地址相关的信息有两种:起始地址和地址长度,reg属性的格式为:
每个“address length”组合表示一个地址范围,其中address是起始地址,length是地址长度,
#address-cells表明address这个数据所占用的字长,#size-cells表明length这个数据所占用的字长,比如:
reg属性
reg属性前面已经提到过了,reg属性的值一般是(address,length)对。reg属性一般用于描述设备
地址空间资源信息,一般都是某个外设的寄存器地址范围信息,比如在imx6ull.dtsi中有如下内容