什么是设备树
设备树(Device Trees)我理解的就是用于描述设备的树型结构。
设备树相关文件
DTS:设备树源码文件
DTB:DTS 编译以后得到的二进制文件
DTC:用于将DTS编译为DTB的工具
DTS语法
头文件
设备树支持头文件,头文件的扩展名为.dtsi,一般用于描述SOC内部外设信息,如:CPU架构丶主频丶外设寄存器地址范围等。
#include "imx6ull-14x14-evk.dts"
设备节点
每一个设备都是一个节点,叫做设备节点,每一个节点通过一些属性信息来描述节点信息。
节点命名格式如下:
节点名字@设备地址或寄存器首地址
其他符号:
/ :根节点
: :节点标签:节点名字
例:
label: node-name@unit-address
可以直接通过&label 来访问这个节点,如通过&cpu0 就可以访问“cpu@0”这个节点。
节点属性
compatible 属性
compatible 属性的值是一个字符串列表,compatible 属性用于将设备和驱动绑定起来。字符串列表用于选择设备所要使用的驱动程序,compatible 属性的值格式如下所示:
"厂商,模块对应的驱动名字"
例:
compatible = "fsl,imx6ul-evk-wm8960","fsl,imx-audio-wm8960";
一般驱动程序文件都会有一个 OF 匹配表,此 OF 匹配表保存着一些 compatible 值,如果设
备节点的 compatible 属性值和 OF 匹配表中的任何一个值相等,那么就表示设备可以使用这个
驱动。
model 属性
model 属性值也是一个字符串,一般 model 属性描述设备模块信息,比如名字什么的
model = "wm8960-audio";
status 属性
status 属性值也是字符串,字符串是设备的状态信息。
值 | 描述 |
okay | 表明设备是可操作的。 |
disabled | 表明设备当前是不可操作的,但是在未来可以变为可操作的 |
fail | 表明设备不可操作,设备检测到了一系列的错误,而且设备也不大可能变得可操作。 |
fail-sss | 含义和“fail”相同,后面的 sss 部分是检测到的错误内容。 |
#address-cells 和#size-cells 属性
这两个属性的值都是无符号 32 位整形,#address-cells 和#size-cells 这两个属性可以用在任
何拥有子节点的设备中,用于描述子节点的地址信息。
#address-cells :地址信息所占用字长
#size-cells :长度信息所占用字长
reg 属性
reg 属性一般用于描述设备地址空间资源信息,一般都是某个外设的寄存器地址范围信息。
reg = <0x02020000 0x4000>;
该寄存器的首地址为0x02020000
ranges 属性
ranges 是一个地址映射/转换表,ranges 属性每个项目由子地址、父地址和地址空间长度
这三部分组成。
name 属性
已经被弃用不推荐使用。
8、device_type 属性
也被抛弃