Yuhang Zheng

第十七节、设备树基本语法

N 人看过

本节用于介绍设备树基本语法

一、设备树基本框架

  • 设备树从根节点开始,每个设备都是一个节点。
  • 节点和节点之间可以互相嵌套,形成父子关子。
  • 设备的属性用key-value对(键值对)来描述,每个属性用分号结束

二、设备树语法

节点

什么是节点呢?节点就好比一颗大树,从树的主干开始,然后有一节一节的树枝,这个就叫节点。在代码中的节点是什么样子的呢。我们把上面模板中的根节点摘出来,如下图所示,这个就是根节点。相当于大树的树干。

/ {//根节点
};//分号

而树枝就相当于设备树的子节点,同样我们把子节点摘出来就是根节点里面的node1和node2,如下图所示:

/ {//根节点
    node1//子节点node1
    {
    };
    node2//子节点node2
    {
    };
};//分号

一个树枝是不是也可以继续分成好几个树枝呢,也就是说子节点里面可以包含子子节点。所以child-node1和child-node2是node1和node2的子节点,如下图所示:

/ {//根节点
    node1//子节点node1
    {
        child-node1//子子节点
        {
        };
    };
    node2//子节点node2
    {
        child-node2//子子节点
        {
        };
    };
};//分号

节点名称

节点的命名有一个固定的格式。

格式:<名称>[@<设备地址>]

<名称>节点的名称也不是任意起的,一般要体现设备的类型而不是特点的型号,比如网口,应该命名为ethernet,而不是随意起一个,比如111。

<设备地址>就是用来访问该设备的基地址。但并不是说在操作过程中来描述一个地址,他主要用来区分用。

注意事项:

<1>同一级的节点只要地址不一样,名字是可以不唯一的。

<2>设备地址是一个可选选项,可以不写。但为了容易区分和理解,一般是都写的。

节点别名

当我们找一个节点的时候,我们必须书写完整的节点路径,如果我们的节点名很长,那么我们在引用的时候就十分不方便,所以,设备树允许我们用下面的形式为节点标注引用(起别名)。比如一个动漫人物的名字是蒙其D-路飞,他的小名是路飞,那是不是小名要比我们的全名更容易记忆了。这个就是别名。

举例:

duart0: serial@21c0500

节点的引用

一般我往一个节点里面添加内容的时候,不会直接把添加的内容写到节点里面,而是通过节点的引用来添加。

&duart0 {
        status = "okay";
};

&duart0表示引用节点别名为duart0的节点,并往这个节点里面添加或者覆盖以下内容:

status = "okay";

注意事项:
编译设备树的时候,相同的节点的不同属性信息都会被合并,相同节点的相同的属性会被重写,使用引用可以避免移植者四处找节点。如dts和dtsi里面都有根节点,但最终会合并成一个根节点。


属性

reg属性

reg 属性用来描述一个设备的地址范围。

格式:

reg = <add1 length1 [add2 length2]……>

举例:

esdhc: esdhc@1560000 {
    reg = <0x0 0x1560000 0x0 0x10000>;
};

其中,0x0是起始地址,0x1560000就是长度

#address-cells 和#size-cells 属性

#address-cells 用来设置子节点中reg地址的数量

#size-cells用来设置子节点中reg 地址长度的数量。

举例:

soc: soc {
    #address-cells = <2>;
    #size-cells = <2>;
    esdhc: esdhc@1560000 {
        reg = <0x0 0x1560000 0x0 0x10000>;
    };
};

其中#address-cells和#size-cell均为2,也就是说我们子节点里面的reg 属性里这个寄存器组的起始地址有两个,长度也只有两个。所以0x0是起始地址,0x1560000是长度;0x0是起始地址,0x10000是长度,

compatible 属性

compatible是一个字符串列表,可以在代码中进行匹配。

举例:

compatible = "simple-bus";

status 属性

status 属性的值类型是字符串,这里我们只要记住俩个常用的即可,一个是okay,表示设备可以正常使用,一个是disable,表示设备不能正常使用。