Linux内核驱动之GPIO子系统

原创 2015年07月08日 11:16:13

在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,然后应用程序直接调用。

其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。

首先,看看系统中有没有“/sys/class/gpio”这个文件夹。

如果没有请在编译内核的时候加入   Device Drivers  —>  GPIO Support  —>     /sys/class/gpio/… (sysfs interface)。

/sys/class/gpio 的使用说明:

gpio_operation 通过/sys/文件接口操作IO端口 GPIO到文件系统的映射

* 控制GPIO的目录位于/sys/class/gpio

* /sys/class/gpio/export文件用于通知系统需要导出控制的GPIO引脚编号

* /sys/class/gpio/unexport 用于通知系统取消导出

* /sys/class/gpio/gpiochipX目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数 导出一个引脚的操作步骤

* 首先计算此引脚编号,引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数

* 向/sys/class/gpio/export写入此编号,比如96号引脚,在shell中可以通过以下命令实现,命令成功后生成/sys/class/gpio/gpio96目录,如果没有出现相应的目录,说明此引脚不可导出:

#echo 96 > /sys/class/gpio/export

* direction文件,定义输入输入方向,可以通过下面命令定义为输出

#echo out > direction

* direction接受的参数:in, out, high, low。high/low同时设置方向为输出,并将value设置为相应的1/0。
* value文件是端口的数值,为1或0.

#echo 1 > value


测试:

1.获取GPIO信息,在终端中输入以下命令

#cd /sys/class/gpio

#for i in gpiochip* ; do echo `cat $i/label`: `cat $i/base` ; done


2.终端中显示如下:

gpio-0: 0
gpio-4: 128
gpio-1: 32
gpio-2: 64
gpio-3: 96

2.计算GPIO号码

我们把GPIO3-0用来控制LED。

GPIO3-0的头是96,GPIO3-0 就是96+0 = 96.

#echo 96 > /sys/class/gpio/export

ls 一下看看有没有 gpio96 这个目录

3.GPIO控制测试。

控制LED是输出。

所以应该执行命令

#echo out > /sys/class/gpio/gpio96/direction

之后就可以进行输出设置了。

#echo 1 > /sys/class/gpio/gpio96/value

#echo 0 > /sys/class/gpio/gpio96/value


Linux内核驱动之GPIO子系统(一)GPIO的使用

一 概述   Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT...
  • u011164819
  • u011164819
  • 2015年12月03日 10:58
  • 691

Linux内核驱动之GPIO子系统(一)GPIO的使用

分类: Linux内核驱动2012-10-31 21:12 162人阅读 评论(1) 收藏 举报 目录(?)[+] 一 概述   Linux内核中gpio是最简单...
  • mirkerson
  • mirkerson
  • 2013年01月04日 13:53
  • 48353

嵌入式linux下操作GPIO

在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实Linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/...
  • u010871058
  • u010871058
  • 2017年03月24日 20:48
  • 413

linux驱动由浅入深系列:输入子系统之二(编写一个gpio_key驱动)

在上一篇文章中我们大致了解了linux input subsystem的功能用应用层的使用,本文我们一起来看一看驱动代码的编写。 在“linux驱动由浅入深系列:驱动程序的基本结构概览”一文中已经解释...
  • RadianceBlau
  • RadianceBlau
  • 2017年02月21日 17:44
  • 722

Android应用层操作GPIO

在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gp...
  • BENKG
  • BENKG
  • 2015年07月14日 18:50
  • 5179

LINUX之GPIO驱动及接口使用

打算跟着友善之臂的《mini2440 Linux移植开发指南》 见 http://www.linuxidc.com/Linux/2011-06/37904.htm 来做个LED驱动,虽然LED的原...
  • s762888517
  • s762888517
  • 2013年06月21日 10:59
  • 5494

Linux下用文件IO的方式操作GPIO(/sys/class/gpio)

通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction...
  • wangweiqiang1325
  • wangweiqiang1325
  • 2016年08月15日 11:21
  • 1844

linux内核中的GPIO系统之(1):软件框架

一、前言作为一个工作多年的系统工程师,免不了做两件事情:培训新员工和给新员工分配任务。对于那些刚刚从学校出来的学生,一般在开始的时候总是分配一些非常简单的任务,例如GPIO driver、LED dr...
  • LoongEmbedded
  • LoongEmbedded
  • 2015年10月28日 11:38
  • 2677

linux驱动开发(一)—GPIO驱动框架

前言          GPIO驱动是Linux驱动开发中最基础、但却是很常用、很重要的驱动。比如你要点亮一个LED灯、键盘扫描、输出高低电平等等。而Linux内核的强大之处在于对最底层的GPIO硬...
  • zengxianyang
  • zengxianyang
  • 2016年01月26日 20:18
  • 5136

gpio子系统和pinctrl子系统(一)

转自http://blog.rongpmcu.com/gpiozi-xi-tong-he-pinctrlzi-xi-tong/ 前言   随着内核的发展,linux驱动框架在不断的...
  • shiyongyue
  • shiyongyue
  • 2017年07月14日 11:46
  • 976
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux内核驱动之GPIO子系统
举报原因:
原因补充:

(最多只允许输入30个字)