一个芯片有许多板子:不同的板子之前可能有一部分是共同的信息
共同信息的:.dtsi文件
个别的:.dts文件
.dtb文件:dts通过dtc工具编译得到dtb文件
.dts文件:设备树源文件
___________________________//使用命令 make dtbs
设备树是采用树形结构来描述板子上的设备信息的文件,
每个设备都是一个节点,叫做设备节点,
每个节点都通过一些属性信息来描述节点信息,
属性就是键—值对
每个节点都有不同属性,不同的属性又有不同的内容,属性都是键值对,值可以为空或任
意的字节流。
——————————————————————————————————————————
节点是由一堆的属性组成,节点都是具体的设备,不同的设备需要的属性不同,
用户可以 自定义属性
有很多属性是标准属性
————————————————————————————————————————
compatible 属性也叫做“兼容性”属性 ,里面的属性值用来匹配驱动
格式:compatible = "fsl,imx6ul-evk-wm8960","fsl,imx-audio-wm8960";
一般:”厂商,驱动的名字“
一般驱动程序文件都会有一个 OF 匹配表,此 OF 匹配表保存着一些 compatible 值,
如果在设备树中有哪个节点的 compatible 属 性值驱动的相等,那这个节点就会使用此驱动文件。
————————————————————————————————————
model 属性:描述设备模块信息 属性值也是字符串
____________________________________________________________
status 属性:描述设备状态 属性值也是字符串
————————————————————————————
这两个属性可在任何拥有子节点的设备中,用于描述子节点的地址信息。
值都是无符号 32 位整形
一个字长=32位
4bit=一个16进制
#address-cells属性:
决定了子节点 reg 属性中地址信息所占用的字长(32 位)
#size-cells 属性:决定了子节点 reg 属性中长度信息所占的字长(32 位)
总:#address-cells 和#size-cells 表明了子节点应该如何编写 reg 属性值
reg = <address1 length1><address2 length2>address 是起始地址,length 是地址长度
/ { //根节点,每个设备树文件只有一个根节 dts和dtsi的根节点的内容会合并成一个根节点
cpus { //节点名字:没有地址
#address-cells = <1>;//cpus 的子节点 reg 属性中起始地址所占用的字长为 1
#size-cells = <0>;//地址长度所占用的字长为 0
//cpu0 是 cpus 的子节点
cpu0: cpu@0 { //节点标签(label):节点名字(设备的名字)@设备的地址或寄存器首地址
//可以直接通过&label 来访问这个节点 简化输入
compatible 属性也叫做“兼容性”属性,
device_type = "cpu";
reg = <0>;//32 位无符号整数 相当于设置了起始地址,而没有设置地址长度。
};
};
intc: interrupt-controller@00a01000 {
compatible = "fsl,imx-gpmi-nand", "fsl, imx-gpmi-nand";//属性值也可以为字符串列表
#interrupt-cells = <3>;
interrupt-controller;
reg = <0x00a01000 0x1000>,
<0x00a02000 0x100>;//32 位无符号整数 的两组的一组值
};
aips3: aips-bus@02200000 {
compatible = "fsl,aips-bus", "simple-bus";
#address-cells = <1>;//起始地址长度所占用的字长为 1
#size-cells = <1>;//地址长度所占用的字长也为 1
dcp: dcp@02280000 {
compatible = "fsl,imx6sl-dcp";
reg = <0x02280000 0x4000>;//设置了起始地址为 0x02280000,地址长度为 0x40000
};
}