Linux 内核GPIO的学习
来源:互联网 发布:闪客是什么意思网络语 编辑:程序博客网 时间:2024/04/29 01:15
Linux的GPIO驱动框架层次及数据结构如下:最上层是用来向向用户空间提供接口,用户可以通过该接口方去控制GPIO PIN脚。GPIO通用接口层主要是维护了一个GPIO PIN的数组gpio_desc[ARCH_NR_GPIOS],每注册一个GPIO控制器,该控制器上所有的PIN都会添加到这个全局数组里面,这样就有了一个统一的GPIO管理接口。GPIO硬件抽象层主要是对GPIO控制器的描述,内核里面用了一个gpio_chip的结构体来描述一个GPIO控制器,结构体里面定义了GPIO操作的函数集。硬件部分跟具体的硬件平台相关,都会提供特定的寄存器组来控制GPIO口。
要想通过/sys/class/gpio操作GPIO口,需要在编译内核的时候打开CONFIG_GPIO_SYSFS标志,系统起来之后就可以在/sys下面看到对应的目录。以手上的项目为例:
sh-3.2# ls /sys/class/gpio/
export gpiochip0 unexport
可以看到在/sys/class/gpio/目录下面有两个文件和一个目录,目录gpiochip0表示当前有注册一个GPIO控制器,文件export是用来把某个GPIO PIN导出到用户空间,而unexport起相反的作用。比如用以下命令把GPIO-35导出到用户空间,
sh-3.2# echo 35 > export
sh-3.2# ls
export gpio35 gpiochip0 unexport
sh-3.2# ls gpio35/
active_low direction edge subsystem uevent value
在/sys/class/gpio目录下多了个gpio35的目录,该目录里面的文件就是用来对改GPIO PIN进行设置的,direction是用来设置GPIO的方向,GPIO设成output时可以通过value来设定high/low,当GPIO PIN被用来做中断线时,可以利用edge设置中断触发的方式。
sh-3.2# cat gpio35/direction
in
sh-3.2# cat gpio35/value
1
sh-3.2# cat gpio35/edge
none
从上面的log看出,GPIO-35目前是input PIN,值为1。
- Linux 内核GPIO的学习
- Linux内核学习笔记之GPIO控制
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- Linux内核驱动之GPIO子系统-GPIO的使用
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- Linux内核驱动之GPIO子系统GPIO的使用
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- Linux内核驱动之GPIO子系统-GPIO的使用
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- Linux内核驱动之GPIO子系统-GPIO的使用
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- Linux内核驱动 GPIO子系统 GPIO的使用
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- tinyxml源码解析(上)
- h5页面,关闭手机键盘
- 栈溢出漏洞及栈溢出攻击
- leetcode
- android app通过webview打开其他app
- Linux 内核GPIO的学习
- js 查找数组重复元素方法
- 【图像处理】CanonCustom Functions1D Tags
- Swift3 访问控制权限关键字变化
- JVM结构探究
- leetcode
- 第2条:遇到多个构造器参数时要考虑用构建器
- 树的前序遍历(递归和非递归java实现)
- 不允许创建临时变量,交换两个数的内容||求10个整数中最大值||求一个函数返回参数二进制中1的个数