设备树基本语法-18
Posted 杨斌并
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设备树基本语法-18相关的知识,希望对你有一定的参考价值。
设备树基本语法
设备树基本框架
- 设备树从根节点开始,每个设备都是一个节点。
- 节点和节点之间可以互相嵌套,形成父子关系
- 设备的属性用key-value对{键值对)来描述,每个属性用分号结束
设备树语法
节点
什么是节点呢?节点就好比一颗大树,从树的主干开始,然后有一节一节的树枝,这个就叫节点。在代码中的节点是什么样子的呢。我们把上面模板中的根节点摘出来,如下图所示,这个就是根节点。相当于大树的树干。
/{
}://分号
而树枝就相当于设备树的子节点,同样我们把子节点摘出来就是根节点里面的node1和node2,如下图所示:
/{ //根节点
node1//子节点node1{
};
node2//子节点node2{
};
};//分号
一个树枝是不是也可以继续分成好几个树枝呢,也就是说子节点里面可以包含子子节点。所以child-node1和child-node2是node1和 node1的子节点,如下图所示:
/{//根节点
node1//子节点node1
{
child-node1 //子子节点
{
};
};
node2//子节点node2
{
child-node2//子子节点
{
};
};
};/分号
节点名称
节点的命名有一个固定的格式。
格式:<名称>[@<设备地址>]
- <名称> 节点的名称也不是任意起的,一般要体现设备的类型而不是特点的型号,比如网口,应该命名为ethernet,而不是随意起一个,比如111。
- <设备地址> 就是用来访问该设备的基地址。但并不是说在操作过程中来描述一个地址,他主要用来区分用。
注意事项:
- 同一级的节点只要地址不一样,名字是可以不唯一的。
- 设备地址是一个可选选项,可以不写。但为了容易区分和理解,一般是都写的。
节点别名
当我们找一个节点的时候,我们必须书写完整的节点路径,如果我们的节点名很长,那么我们在引用的时候就十分不方便,所以,设备树允许我们用下面的形式为节点标注引用(起别名)。比如一个动漫人物的名字是蒙其·D·路飞,他的小名是路飞,那是不是小名要比我们的全名更容易记忆了。这个就是别名。
举例:
uart8: serial@02288000
其中,uart8 就是这个节点名称的别名,serial@ 02288000就是节点名称。
节点的引用
一般我往一个节点里面添加内容的时候,不会直接把添加的内容写到节点里面,而是通过节点的引用来添加。
举例
&uart8 {
pinctrl names = "default";
pinctrl-0 =<&pinctrl_uart8>;
status = "okay";
}
- &uart8表示引用节点别名为uart8的节点,并往这个节点里面添加以下内容:
- pinctrl-names = “default”;
- pinctrl-0 =<&pinctrl_uart8>;status =“okay”;
注意事项:
编译设备树的时候,相同的节点的不同属性信息都会被合并相同节点的相同的属性会被重写,使用引用可以避免移植者四处找节点。如dts,和dtsi里面都有根节点,但最终会合并成一个根节点。
属性
-
reg属性
reg属性用来描述一个设备的地址范围。
格式:
reg=<add1 length1 [add2 length2]……>
举例
serial@02288000{
reg = <101F2000 O×1000>;
}
其中101F2000就是起始地址,Ox1000就是长度。
-
#address-cells 和#size-cells 属性
#address-cells 用来设置子节点中reg地址的数量#size-cells用来设置子节点中reg地址长度的数量。
举例
cpu{
#address-cells =<1>;
#size-cells=<1>;
serial@101F2000{
compatible = "serial";
reg =<101F2000 Ox1000>;
};
};
其中#address-cells和#size-cell均为1,也就是说我们子节点里面的reg属性里这个寄存器组的起始地址只有一个,长度也只有一个。所以101F2000是起始地址,Ox1000是长度。
- compatible属性
compatible是一个字符串列表,可以在代码中进行匹配。
举例:
compatible - "led";
- status属性
status属性的值类型是字符串,这里我们只要记住俩个常用的即可,一个是okay,表示设备可以正常使用,一个是disable,表示设备不能正常使用。
以上是关于设备树基本语法-18的主要内容,如果未能解决你的问题,请参考以下文章
Linux——Linux驱动之设备树基本概述及语法总结(为什么会出现设备树,设备树解决了什么问题?)