linux 驱动之设备树基础概念

Table of Contents

一、设备节点

1.1、节点命名方式

二、节点内的属性

1、属性值格式

2.1.1、字符串

2.1.2、32 位无符号整数

2.1.3、字符串列表

2、标准属性

2.2.1、compatible 属性

2.2.2、model 属性

2.2.3、status 属性

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

2.2.5、reg 属性

2.2.6、ranges 属性

2.2.7、name 属性

2.2.8、device_type 属性

三、向节点追加或修改内容

1、追加子节点

2、修改内容


一、设备节点

1.1、节点命名方式

(1)node-name@unit-address

其中“node-name”是节点名字,为 ASCII 字符串,节点名字应该能够清晰的描述出节点的
功能,比如“uart1”就表示这个节点是 UART1 外设。“unit-address”一般表示设备的地址或寄
存器首地址,如果某个节点没有地址或者寄存器的话“unit-address”可以不要,比如“cpu@0”、
“interrupt-controller@00a01000”

(2)labe:node-name@unit-address

引入 label 的目的就是为了方便访问节点,可以直接通过&label 来访问这个节点,比如:cpu0:cpu@0  通过
&cpu0 就可以访问“cpu@0”这个节点,而不需要输入完整的节点名字。

二、节点内的属性

1、属性值格式

2.1.1、字符串

compatible = "arm,cortex-a7";

上述代码设置 compatible 属性的值为字符串“arm,cortex-a7”

2.1.2、32 位无符号整数

reg = <0>;

上述代码设置 reg 属性的值为 0,

reg = <0 0x123456 100>;

reg 的值也可以设置为一组值,

2.1.3、字符串列表

compatible = "fsl,imx6ull-gpmi-nand", "fsl, imx6ul-gpmi-nand";

属性值也可以为字符串列表,字符串和字符串之间采用“,”隔开,

上述代码设置属性 compatible 的值为“fsl,imx6ull-gpmi-nand”和“fsl, imx6ul-gpmi-nand”。

2、标准属性

2.2.1、compatible 属性

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 内核里面查找,看看能不能找到与之匹配的驱动文件,如果没有找到的话就使用第二个兼容值查找,直到找到或者查找完整个 Linux 内核也没有找到对应的驱动

2.2.2、model 属性

model = "wm8960-audio";

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

2.2.3、status 属性

status 属性看名字就知道是和设备状态有关的, status 属性值也是字符串,字符串是设备的
状态信息,可选的状态如表 所示:

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

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

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

2.2.5、reg 属性

reg = <address1 length1 address2 length2 、、、>

{

#address-cells = <1>;

 #size-cells = <0>;

 gpio_spi: gpio_spi@0 {
 compatible = "fairchild,74hc595";
 reg = <0>; //address-cells=1:一个32位的地址   size-cells=0:为0也就是没有
 };

}

{

#address-cells = <1>;

 #size-cells = <1>;

 dcp: dcp@02280000 {
 compatible = "fsl,imx6sl-dcp";
 reg = <0x02280000 0x4000>;  //address-cells=1:一个32位的地址   size-cells=1: 一个32位的长度
};

}

2.2.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 属性不为空的示例代码如下所示:
 

1 soc {
2 compatible = "simple-bus";
3 #address-cells = <1>;
4 #size-cells = <1>;
5 ranges = <0x0 0xe0000000 0x00100000>;
6 
7serial {
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。
第 6 行, serial 是串口设备节点, reg 属性定义了 serial 设备寄存器的起始地址为 0x4600,
寄存器长度为 0x100。经过地址转换, serial 设备可以从 0xe0004600 开始进行读写操作,
0xe0004600=0x4600+0xe0000000。

2.2.7、name 属性

name 属性值为字符串, name 属性用于记录节点名字, name 属性已经被弃用,不推荐使用
name 属性,一些老的设备树文件可能会使用此属性。

2.2.8、device_type 属性

device_type 属性值为字符串, IEEE 1275 会用到此属性,用于描述设备的 FCode,但是设
备树没有 FCode,所以此属性也被抛弃了。此属性只能用于 cpu 节点或者 memory 节点。

三、向节点追加或修改内容

1、追加子节点

假设现在有个六轴芯片fxls8471, fxls8471 要接到 I.MX6U-ALPHA 开发板的 I2C1 接口上,然而IIC1节点是在.dtsi文件定义的,那么怎么追加呢?

正确做法:在dts文件中引用IIC1节点

例如:

 &i2c1 {
         fxls8471@1e {
      compatible = "fsl,fxls8471";
      reg = <0x1e>;
      position = <0>;
     interrupt-parent = <&gpio5>;
      interrupts = <0 8>;
    };

 };

2、修改内容

224 &i2c1 {
225 clock-frequency = <100000>;
226 pinctrl-names = "default";
227 pinctrl-0 = <&pinctrl_i2c1>;
228 status = "okay";

、、、、、

}
示例代码 43.3.5.4 就是向 i2c1 节点添加/修改数据,比如第 225 行的属性“clock-frequency”就表示 i2c1 时钟为 100KHz。“clock-frequency”就是新添加的属性
第 228 行,将 status 属性的值由原来的 disabled 改为 okay
 

本笔记是来源文档:正点原子linux教程

发布了137 篇原创文章 · 获赞 106 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/shenlong1356/article/details/103549559