dtsi与dts_[dts]DTS实例分析
此篇源文件arch/arm/boot/dts/imx6sx.dtsi
1. dts和dtsi完成的功能
以下是两段较为常见的dtsi和dts代码
1 uart5: serial@021f4000 {2 compatible = "fsl,imx6sx-uart",3 "fsl,imx6q-uart", "fsl,imx21-uart";4 reg = <0x021f4000 0x4000>;5 interrupts = ;6 clocks = ,7 ;8 clock-names = "ipg", "per";9 dmas = , ;10 dma-names = "rx", "tx";11 status = "disabled";12 };
以上这段代码更多出现在*.dtsi中
一般会在*.dtsi中将芯片的外设接口资源都做定义,
如uart5作为该外设的label,node-name@unit-address作为设备的名称,node-name只是设备类型,uart1/uart2/uart3等可以都是serial名称,而@后面则跟着设备寄存器起始地址。
compatible默认属性,
reg寄存器地址和长度,该uart5节点的父节点为aips2,在父节点中指明#address-cells = <1>;#size-cells = <1>;这决定了子节点字段长度address为1, length为1. 所以reg格式为reg = <0x021f4000 0x4000>;
interrupts对应的中断号和中断出发方式,uart5的父节点为aips2,而aips2的父节点为soc,soc节点定义了interrupt-parent = ;给出了节点所依附的中断控制器,如果节点没有指定interrupt-parent,那么就从父节点继承,所以该uart5节点继承了soc的中断控制器,即intc. 而intc节点的#interrupt-cells = <3>;所以就有了该节点中interrupts = ;三个字段,具体这三个字段的含义可以参考芯片文档的描述。其中GIC_SPI定义在include/dt-bindings/interrupt-controller/arm-gic.h值为0,
clock外设时钟,在include/dt-bindings/clock/imx6sx-clock.h,指定设备工作时钟
status一般会设为disabled。
1 &uart5 {2 pinctrl-names = "default";3 pinctrl-0 = ;4 fsl,uart-has-rtscts;5 status = "okay";6 };
以上这段代码更多出现在*.dts中
在*.dts中如果想对该设备进行操作,需要进行override,至少status需要从disabled设置为okay, 当然也有可能需要对compatible属性进行重写(为了和自己的driver匹配),另外需要使用&label首先引用该设备,使用pinctrl-names和pinctrl-0进行引脚的配置,当然这里可能出现多组引脚的配置,如下代码:
1 &usdhc3 {2 pinctrl-names = "default", "state_100mhz", "state_200mhz";3 pinctrl-0 = ;4 pinctrl-1 = ;5 pinctrl-2 = ;6 bus-width = <8>;7 cd-gpios = ;8 wp-gpios = ;9 keep-power-in-suspend;10 enable-sdio-wakeup;11 vmmc-supply = ;12 status = "okay";13 };
而这里面的pinctrl-0对应的pinctrl_usdhc3内容如下:
1 pinctrl_usdhc3: usdhc3grp {2 fsl,pins = <
3 MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x17069
4 MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x10071
5 MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x17069
6 MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x17069
7 MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x17069
8 MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x17069
9 MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x17069
10 MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x17069
11 MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x17069
12 MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x17069
13 MX6SX_PAD_KEY_COL0__GPIO2_IO_10 0x17059 /*CD*/
14 MX6SX_PAD_KEY_ROW0__GPIO2_IO_15 0x17059 /*WP*/
15 >;16 };
这种pinctrl的设置可参照/Documentation/devicetree/bindinsg/pinctrl下示例代码
2. 通常会碰到的实际问题
到此,问题出现了:
1. 当写一个按键驱动,应该如何在*.dts或者*.dtsi中操作?
2. 当在串口driver中需要使用到某个pin脚作为普通输出IO,该如何操作?
3. 当在串口driver中需要使用某个muxpin脚作为ADC或者其他服用功能该如何操作?
4. 当在串口driver中有可能想使能某个功能而不想写定在driver代码中,该如何操作?
5. 当想向driver中传入一个常数如做delay延时操作等等,该如何操作?
解答:
1. 当写一个按键驱动,应该如何在*.dts或者*.dtsi中操作?
1 gpio-keys {2 compatible = "gpio-keys";3 pinctrl-names = "default";4 pinctrl-0 = ;5
6 volume-up {7 label = "Volume Up";8 gpios = ;9 linux,code = ;10 };11
12 volume-down {13 label = "Volume Down";14 gpios = ;15 linux,code = ;16 };17 };
1 pinctrl_gpio_keys: gpio_keysgrp {2 fsl,pins = <
3 MX6SX_PAD_CSI_DATA04__GPIO1_IO_18 0x17059
4 MX6SX_PAD_CSI_DATA05__GPIO1_IO_19 0x17059
5 >;6 };
2. 当在串口driver中需要使用到某个pin脚作为普通输出IO,该如何操作?
1 sii902x_reset: sii902x-reset {2 compatible = "gpio-reset";3 reset-gpios = ;4 reset-delay-us = <100000>;5 #reset-cells = <0>;6 status = "disabled";7 };
最简单的不需要pinctrl来进行pin脚的设置,为什么???
3. 当在串口driver中需要使用某个muxpin脚作为ADC或者其他服用功能该如何操作?
这个问题其实上面有提到,就像上述的多个pin-names和多个pinctrl在后面的pinctrl中配置这个复用的管脚即可。
4. 当在串口driver中有可能想使能某个功能而不想写定在driver代码中,该如何操作?
1 &uart5 {2 pinctrl-names = "default";3 pinctrl-0 = ;4 fsl,uart-has-rtscts;5 status = "okay";6
7 };
只需要在driver中使用of函数读取此属性,如果有此字段,可以使能某些操作;如果没有就失能某些操作。
5. 当想向driver中传入一个常数如做delay延时操作等等,该如何操作?
1 &usdhc3 {2 pinctrl-names = "default", "state_100mhz", "state_200mhz";3 pinctrl-0 = ;4 pinctrl-1 = ;5 pinctrl-2 = ;6 bus-width = <8>;7 cd-gpios = ;8 wp-gpios = ;9 keep-power-in-suspend;10 enable-sdio-wakeup;11 vmmc-supply = ;12 status = "okay";13 };
只需要在driver中读取bus-width字段的值,即可获取到8这个常量,注意在devicetree中命名字段更多使用"-"而非下划线"_".
dtsi与dts_[dts]DTS实例分析相关推荐
- gpgpu-sim卡分配程序设计实例分析
gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...
- python多功能电子钟_python gui - PyQt4 精彩实例分析之电子钟
PyQt4 精彩实例分析之电子钟,当然在写实例之前要先安装PyQt4模块.from PyQt4.QtGui import * from PyQt4.QtCore import * import sys ...
- RPC-原理及RPC实例分析
还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞: (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻 ...
- python asyncio教程_python中使用asyncio实现异步IO实例分析
1.说明 Python实现异步IO非常简单,asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持. asyncio的编程模型就是一个消息循环.我们从asyncio模块中直接 ...
- 马歇尔·赫伯特:人工智能的前沿技术与实例分析
来源:中国人工智能学会 2017年12月11日,国际知名机器人专家.美国卡耐基梅隆大学机器人研究所所长马歇尔·赫伯特(Martial Hebert)教授和首席科学家大卫·伯恩(David Bourne ...
- python怎么处理数据_python中scrapy处理项目数据的实例分析
在我们处理完数据后,习惯把它放在原有的位置,但是这样也会出现一定的隐患.如果因为新数据的加入或者其他种种原因,当我们再次想要启用这个文件的时候,小伙伴们就会开始着急却怎么也翻不出来,似乎也没有其他更好 ...
- Android10.0 Binder通信原理(四)-Native-C\C++实例分析
摘要:本节主要来讲解Android10.0 Binder的Native层实例流程 阅读本文大约需要花费35分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Androi ...
- Android Touch事件原理加实例分析
Android中有各种各样的事件,以响应用户的操作.这些事件可以分为按键事件和触屏事件.而Touch事件是触屏事件的基础事件,在进行Android开发时经常会用到,所以非常有必要深入理解它的原理机制. ...
- SSL/TLS 协议简介与实例分析
作者:drinkey 以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SS ...
- java list反序列化_java序列化与反序列化操作实例分析
本文实例分析了java序列化与反序列化操作.分享给大家供大家参考,具体如下: 概述: Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程. ...
最新文章
- java十进制小数转化为二进制小数代码 乘二取整法_(四)改掉这些坏习惯,还怕写不出健壮的代码?...
- linux系统读取第二个盘的数据,磁盘及文件系统管理—第二篇
- HTML头部元素标签
- 浅谈群集与分布式基础知识
- 禁止遮罩层以下屏幕滑动----正解(更新版)
- telnet ip 端口
- [Lintcode]102. Linked List Cycle/[Leetcode]
- 第三章 计算机网络技术,计算机网络技术第三章习题
- cisco 三层交换机作DHCP服务器的配置
- 【Python】常用字符串api
- 如何实现:GridView 控件中显示的文本不自动换行,隐藏超出宽度部分wj-wangjun
- 协程实践及应用(获取区划代码和城乡划分代码)
- Java过滤器与拦截器的区别
- Web前端开发之CSS学习笔记5—溢出、浮动、层叠
- 第1章:基本句型及补语
- nas磁盘用什么软件测试,手把手教你从NAS拿点空间当电脑硬盘使用 iSCSI开启网络硬盘共享...
- mysql reopen table,MYSQL临时表关联Can't reopen table
- D-HARRY2020春夏新品
- You-Get,多网站视频下载工具,非常方便
- 参考文献的类型--参考文献里的J、M等字母都代表什么
热门文章
- bootstrap 栅栏剧中_Bootstrap 栅栏布局中 col-xs-*、col-sm-*、col-md-*、col-lg-* 区别及使用方法...
- sublime4 安装pretty json 并绑定快捷键
- 2000字精华总结,安利一个超好用的Pandas数据挖掘分析神器
- 求你了,别再用 print 调试代码了
- 你们需要的数据集,都给准备好了!
- Python 的 heapq 模块源码分析
- 为什么苹果6没有录屏_为什么苹果手机受欢迎?因为没有一部安卓手机是“干净”的...
- html点击按钮弹出悬浮窗_网课助手1.0 支持悬浮窗搜题等多功能
- shell脚本执行php文件_分享两个shell脚本实例--批量生成随机字符文件名和批量改名...
- c++读取图片_手工计算神经网络第三期:数据读取与完成训练