4234|2

7228

帖子

192

TA的资源

五彩晶圆(高级)

楼主
 

《原子嵌入式Linux驱动开发详解与实战》第4章 第5章设备树相关例程学习 [复制链接]

设备树DTS语法

 

一.dtsi 头文件

和 C 语言一样,设备树也支持头文件,设备树的头文件扩展名为.dtsi。在 imx6ull-alientekemmc.dts 中有如下所示内容:

 

#include <dt-bindings/input/input.h>

#include "imx6ull.dtsi"

 

 

 

二.设备节点

 

节点是由一堆的属性组成,节点都是具体的设备,不同的设备需要的属性不同,用户可以自定义属性。每个设备都有一个节点,叫做设备节点。

 

除了用户自定义属性,有很多属性是标准属性, Linux 下的很多外设驱动都会使用这些标准属性,本节我们就来学习一下几个常用的标准属性。

 

打开dtsi文件

 

“/”是根节点,每个设备树文件只有一个根节点。

 

 

 

1、compatible 属性

 

compatible 属性也叫做“兼容性”属性,这是非常重要的一个属性!compatible 属性的值是一个字符串列表, compatible 属性用于将设备和驱动绑定起来。字符串列表用于选择设备所要使用的驱动程序, compatible 属性的值格式如下所示:

 

"manufacturer,model"

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

 

 

 

Led这个设备首先使用第一个兼容值在linux内核中查找,如果没有再用第二个值查找。一般驱动文件都有一个of匹配表,此OF匹配表保存一些compatible值,如果设备节点的任一个compatible值与之匹配,那么表示这个设备可以使用这个驱动。

设备树里有的话应该也一样吧,个人理解

 

 

 

 

 

model 属性

 

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

 

model = "wm8960-audio";

 

非必须的吧

 

status 属性

status 属性是和设备状态有关的, status 属性值也是字符串,字符串是设备的状态信息,可选的状态如表

 

 

 

 

#address-cells 和#size-cells 属性

这两个属性的值都是无符号 32 位整形, #address-cells 和#size-cells 这两个属性可以用在任何拥有子节点的设备中,用于描述子节点的地址信息。

 

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

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

 

 

 

 

reg 属性

reg 属性的值一般是(address, length)对。 **reg 属性一般用于描述设备地址空间资源信息,一般都是某个外设的寄存器地址范围信息,**比如在 imx6ull.dtsi 中有如下内容:

uart1: serial@02020000 {

    compatible = "fsl,imx6ul-uart",

             "fsl,imx6q-uart", "fsl,imx21-uart";

    reg = <0x02020000 0x4000>;

    interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;

    clocks = <&clks IMX6UL_CLK_UART1_IPG>,

             <&clks IMX6UL_CLK_UART1_SERIAL>;

    clock-names = "ipg", "per";

    status = "disabled";

};

 

上述代码是节点 uart1, uart1 节点描述了 I.MX6ULL 的 UART1 相关信息。其中 uart1 的父节点 aips1: aips-bus@02000000 设置了#address-cells = <1>、 #sizecells = <1>,因此 reg 属性中address=0x02020000, length=0x4000。

 

查阅《I.MX6ULL 参考手册》可知, I.MX6ULL 的 UART1 寄存器首地址为 0x02020000,但是 UART1 的地址长度(范围)并没有 0x4000 这么多,这里我们重点是获取 UART1 寄存器首地址。

 

 

 

Chosen子节点

 

 

Chosen节点主要是为了Uboot向Linux内核传递数据,重点是bootargs参数。一般dts文件中的chosen节点通常为空或者内容很少

 

 

追加节点

 

 

 

最新回复

支持一下楼主,辛苦了,感谢楼主分享的嵌入式Linux驱动开发的技术内容,希望楼主再接再厉   详情 回复 发表于 2024-10-1 12:29
点赞 关注

回复
举报

1286

帖子

4

TA的资源

版主

沙发
 

设备树分析的不错,更改过TI的设备树,内容也差不多

 
 

回复

419

帖子

0

TA的资源

纯净的硅(中级)

板凳
 

支持一下楼主,辛苦了,感谢楼主分享的嵌入式Linux驱动开发的技术内容,希望楼主再接再厉

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表