设备树讲解

前言:设备树很简单,只需要学习语法。

 

一、DTC DTS DTB的关系

源码 :test.dts

可执行文件: test.dtb

编译工具:DTC

编译所有dts文件:make dtbs 

编译指定的dts文件:make test.dtb

二、DTS 基本语法

头文件:

可以将芯片共有的信息提取出来作为一个通用的.dtsi文件

可以将芯片共有的信息提取出来作为一个通用的.dtsi文件

在其他文件中可以用#include 来引用这个公用的文件,例如#include "test.dtsi"

树根:

/为设备树的根

一棵树就用以下表示

/{

    ########

    %%%%%

}

或者将一个根拆为两个

/{

    ########

}

/{

    %%%%%

}

即两个根相当于一个根。在test.dts中的根和test.dtsi中的根可以合起来。

设备节点:

设备节点就相当于副树干,不同设备以设备节点的方式挂在主干上。

设备节点下是很多键值对,这些键值对称为属性,用来描述这个设备节点。

大致情况如图:

/{    /*根*/

    根节点的属性一 = 1;
    根节点的属性二 = 2;

    节点一{

        属性一 = 1;

        属性二 = 2;

    };

    节点一{

        属性一 = 1;

        属性二 = 2;

    };

}

节点命名格式:

label:node-name@usnit-addres

label:节点标签,相当于小朋友的外号

node-name:节点名字

usnit-addres:寄存器地址 可以不要

例子:

/{/*根节点*/

    cpus{/*节点一*/

    };

    uart0:uart{/*节点2*/

    };

    led0:led@00a01000{/*节点3*/

    };

}

label的作用

如果你在test.dtsi文件中使用了led节点

led0:led{

}

你想在test1.dts中修改led节点的属性就可以使用

&led0{

}

三、标准属性:

1 、compatible

兼容性

compatible 属性的值是一个字符串列表

例如:compatible = "fsl,imx6ul-evk-wm8960","fsl,imx-audio-wm8960";

其中“fsl”表示厂商是飞思卡尔,“imx6ul-evk-wm8960”和“imx-audio-wm8960”表示驱动模块名字

2 、model

model 属性值也是一个字符串,一般 model 属性描述设备模块信息,比如名字什么的

model = "wm8960-audio";

3 、status

  • “okay”  表明设备是可操作的。
  • “disabled”表明设备当前是不可操作的,但是在未来可以变为可操作的,比如热插拔设备插入以后。至于 disabled 的具体含义还要看设备的绑定文档。
  • “fail”表明设备不可操作,设备检测到了一系列的错误,而且设备也不大可能变得可操作。
  • “fail-sss”  含义和“fail”相同,后面的 sss 部分是检测到的错误内容。

4 、#address-cells  和#size-cells

用于描述子节点的地址信息

#address-cells 属性值决定了子节点 reg 属性中地址信息所占用的字长(32 位),#size-cells 属性值决定了子节点 reg 属性中长度信息所占的字长(32 位)。

一般 reg 属性都是和地址有关的内容,起始地址和地址长度。

reg 属性的格式一为:
reg = <address1 length1 address2 length2 address3 length3……>

例如:

aips3: aips-bus@02200000 {
compatible = "fsl,aips-bus", "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
    dcp: dcp@02280000 {

    compatible = "fsl,imx6sl-dcp";
    reg = <0x02280000 0x4000>;
    };
 };

5 、reg  

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

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 确定此地址长度所占用的字长。

7 、name

name 属性值为字符串,name 属性用于记录节点名字。

8 、device_type

节点类型

 

四、设备树在系统中的体现:

系统启动以后可以在根文件系统里面看到设备树的节点信息

在 /proc/device-tree目录下存放着设备树信息

想要查看节点属性值可以使用 cat命令

如cd leds 

使用cat name查看leds的name属性值

五、在设备树的根节点下添加一个自己的节点

在linux源码目录中执行 make dtbs

将生成的dtb文件拷贝到tftp目录

nfs方式启动开发板

cd /proc/deveice-tree

就可以看到自己的节点mytestnod

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值