1.什么是设备树: (DTS)采用树形结构描述扳级设备,也就是开发板上的设备信息,每个设备都是一个节点。

一个SOC可以做出很多不同的板子,这些不同的板子肯定是有共同的信息,将这些共同的信息提取出来作为一个通用文件,其他的设备树 .dts文件直接引用这个通用文件即可,这个通用的文件就是 .dtsi文件。
2.DTS、DTB和DTC: DTS即为设备树文件,DTB是讲DTS编译以后得到的二进制文件,而DTC则为编译工具。
3.单 独编译设备树:make dtbs 或者 make stm32mp157-ed1.dtb。
4. 设备树语法:
(1)设备树中节点命名格式:
node-name@unit-address。
eg:"cpu@0","interrupt-controller@00a01000" 。
label:node-name@unit-address。可通过"&label"访问该节点。
eg:"cpu0:cpu@0"。
(2)节点属性格式:属性都是键值对,值可以为空或任意字节流。
<1>字符串:compatible =“arm,contex-a7";
<2>32位无符号整数:reg = <0>; reg = <0 0X123456 100>;
<3>字符串列表:compatible = "st,stm32mp157d-atk","st,stm32mp157";
(3)一些常用的节点标准属性:
<1> compatible属性:用于将设备和驱动绑定起来。
eg:compatible = "cirrus,cs42151"; 其中‘cirrus’表示厂商,‘cs42151’表示驱动模块名字。
<2> model属性:用于描述设备模块信息。
<3> status属性:描述设备状态,可选状态("okay","disable","fail","fail-sss")。
<4> #address-cells属性:决定了设备子节点,reg属性中地址信息用几个32位的字长来表示地址。
<5> #size-cells属性:决定了设备子节点,reg属性中长度信息用几个32位的字长来表示地址长度。
<6> reg属性:一般用于描述设备地址空间资源信息。一般是<address length>。
eg:/{
#address-cells = <0X02>;
#size-cells = <0X01>;
…………
…………
sub-node{
…………
reg = <>0X90000000 00000000 0X80000000; //0X90000000 00000000 子节点地址。
//0X80000000子节点大小。
…………
}
}
<7> ranges属性:描述子地址和父地址的映射关系。
<8> name属性:用于记录节点名字。
<9> device_type属性:用于描述设备的FCode, 但是设备树没有FCode,所以被抛弃。