DTS设备树学习

DTS的简介可以看这个博主的博客:
https://great.blog.csdn.net/article/details/89847843

设备节点

node-name@unit-address

node-name:指节点的名字
unit-address:一般表示设备的地址或寄存器首地址,如果某个节点没有地址或者寄存器的话可写0

label: node-name@unit-address

引入 label 的目的就是为了方便访问节点,可以直接通过&label 来访问这个节点,比如通过
&cpu0 就可以访问“cpu@0”这个节点,而不需要输入完整的节点名字。再比如节点 “intc: 
interrupt-controller@00a01000”,节点 label 是 intc,而节点名字就很长了,为
“interruptcontroller@00a01000”。很明显通过&intc 来访问“interrupt-controller@00a01000”这个节点要方
便很多!

标准属性

1、compatible 属性

"manufacturer,model"
其中 manufacturer 表示厂商,model 一般是模块对应的驱动名字。

示例: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 内
核里面查找,看看能不能找到与之匹配的驱动文件,如果没有找到的话就使用第二个兼容值查。一般驱动程序文件都会
有一个 OF 匹配表,此 OF 匹配表保存着一些 compatible 值,如果设备节点的 compatible 属性值和 OF 匹配表
中的任何一个值相等,那么就表示设备可以使用这个驱动。


2、 model 属性

model 属性值也是一个字符串,一般 model 属性描述设备模块信息,比如名字什么的,比
如:
   model = "wm8960-audio";

3、status 属性

status 属性看名字就知道是和设备状态有关的,status 属性值也是字符串,字符串是设备的状态信息,
描述
okay表明设备是可操作的。
disabled表明设备当前是不可操作的,但是在未来可以变为可操作的,比如热插拔设备插入以后。至于 disabled 的具体含义还要看设备的绑定文档。
fail表明设备不可操作,设备检测到了一系列的错误,而且设备也不大可能变得可操作。
fail-sss含义和“fail”相同,后面的 sss 部分是检测到的错误内容。

4、#address-cells 和#size-cells 属性

这两个属性的值都是无符号 32 位整形,"#address-cells ""#size-cells" 这两个属性可以用在任
何拥有子节点的设备中,用于描述子节点的地址信息。 "#address-cells"属性值决定了子节点 reg 属
性中地址信息所占用的字长(32)"#size-cells"属性值决定了子节点 reg 属性中长度信息所占的字长(32)"#address-cells""#size-cells" 表明了子节点应该如何编写 reg 属性值,一般 reg 属性
都是和地址有关的内容,和地址相关的信息有两种:起始地址和地址长度,reg 属性的格式一为:

		reg = <address1 length1 address2 length2 address3 length3……>

5、reg属性

reg 属性的值一般是(address,length)对。reg 属性一般用于描述设备地址空间资源信息,
一般都是某个外设的寄存器地址范围信息。

示例:

1 spi4 {
2 	compatible = "spi-gpio";
3 	#address-cells = <1>;
4 	#size-cells = <0>;
5 
6 	gpio_spi: gpio_spi@0 {
7 		compatible = "fairchild,74hc595";
8 		reg = <0>;
9 };
10 };
11
12 aips3: aips-bus@02200000 {
13 	compatible = "fsl,aips-bus", "simple-bus";
14 	#address-cells = <1>;
15 	#size-cells = <1>;
16
17 	dcp: dcp@02280000 {
18 		compatible = "fsl,imx6sl-dcp";
19 		reg = <0x02280000 0x4000>;
20 };
21 };

第 3,4 行,节点 spi4 的#address-cells = <1>,#size-cells = <0>,说明 spi4 的子节点 reg 属
性中起始地址所占用的字长为 1,地址长度所占用的字长为 0。
第 8 行,子节点 gpio_spi: gpio_spi@0 的 reg 属性值为 <0>,因为父节点设置了#addresscells = <1>,#size-cells = <0>,因此 addres=0,没有 length 的值,相当于设置了起始地址,而没
有设置地址长度。
第 14,15 行,设置 aips3: aips-bus@02200000 节点#address-cells = <1>,#size-cells = <1>,
说明 aips3: aips-bus@02200000 节点起始地址长度所占用的字长为 1,地址长度所占用的字长也
为 1。
第 19 行,子节点 dcp: dcp@02280000 的 reg 属性值为<0x02280000 0x4000>,因为父节点设
置了#address-cells = <1>,#size-cells = <1>,address= 0x02280000,length= 0x4000,相当于设置
了起始地址为 0x02280000,地址长度为 0x40000。


6、ranges 属性

ranges属性值可以为空或者按照(child-bus-address,parent-bus-address,length)格式编写的数字
矩阵,ranges 是一个地址映射/转换表,ranges 属性每个项目由子地址、父地址和地址空间长度
这三部分组成:

child-bus-address:子总线地址空间的物理地址,由父节点的"#address-cells" 确定此物理地址
所占用的字长。

parent-bus-address:父总线地址空间的物理地址,同样由父节点的"#address-cells" 确定此物
理地址所占用的字长。

length:子地址空间的长度,由父节点的"#size-cells" 确定此地址长度所占用的字长。
如果 ranges 属性值为空值,说明子地址空间和父地址空间完全相同,不需要进行地址转换,

示例为空:

137 soc {
138 #address-cells = <1>;
139 #size-cells = <1>;
140 compatible = "simple-bus";
141 interrupt-parent = <&gpc>;
142 ranges;
......
1177 }

不为空

1 soc {
2 	compatible = "simple-bus";
3 	#address-cells = <1>;
4 	#size-cells = <1>;
5 	ranges = <0x0 0xe0000000 0x00100000>;
6 
7 	serial {
8 		device_type = "serial";
9 		compatible = "ns16550";
10 		reg = <0x4600 0x100>;
11 		clock-frequency = <0>;
12 		interrupts = <0xA 0x8>;
13 		interrupt-parent = <&ipic>;
14 };
15 };

第 5 行,节点 soc 定义的 ranges 属性,值为<0x0 0xe0000000 0x00100000>,此属性值指定
了一个 1024KB(0x00100000)的地址范围,子地址空间的物理起始地址为 0x0,父地址空间的物
理起始地址为 0xe0000000。

第 10 行,serial 是串口设备节点,reg 属性定义了 serial 设备寄存器的起始地址为 0x4600,
寄存器长度为 0x100。经过地址转换,serial 设备可以从 0xe0004600 开始进行读写操作,
0xe0004600=0x4600+0xe0000000。


正点原子dts学习记录,续更

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值