文档章节

/sys/class/gpio 操作方法

宁宁爸
 宁宁爸
发布于 2016/01/29 15:50
字数 659
阅读 255
收藏 0

嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。下面以ZC702开发上调试为例子说明流程:

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

如果没有请在编译内核的时候加入   Device Drivers  —>  GPIO Support  —>     /sys/class/gpio/… (sysfs interface)。注:本人的内核默认是选中的,不需要重新选择

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

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

2、控制GPIO的目录位于/sys/class/gpio;

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

4、/sys/class/gpio/unexport 用于通知系统取消导出;

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

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

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

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

9、echo out > direction, direction接受的参数:in, out, high, low。high/low同时设置方向为输出,并将value设置为相应的1/0;

10、value文件是端口的数值,为1或0.echo 1 > value


下面在ZC702开发板下进行一下测试

1.取得GPIO信息,在终端中敲入以下命令:

1.1、$ cd /sys/class/gpio;

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

本人用的命令是:echo `cat gpiochip906/label`: `cat gpiochip906/base`


终端中显示如下:

zynq_gpio: 906


2.计算GPIO号码

我们把GPE10用来控制LED。

GPIO的头是906,10 就是906+10 = 916.

$ echo 916 > /sys/class/gpio/export

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

3.GPIO控制测试。

控制LED所以是输出。

所以我们应该执行:

$ echo out > /sys/class/gpio/gpio916/direction

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

$ echo 1 > /sys/class/gpio/gpio916/value

$ echo 0 > /sys/class/gpio/gpio916/value



本文转载自:http://bbs.elecfans.com/jishu_447971_1_1.html

共有 人打赏支持
宁宁爸
粉丝 82
博文 57
码字总数 25735
作品 0
高级程序员
私信 提问
Cubieboard官方 GPIO驱动使用总结

最近参考了tll同学的GPIO操作教程,终于完成了CB的GPIO控制操作。 板子使用的操作系统是官方标准系统1.1版本的linaro官方img的,本身已经带gpio驱动文件。 1.官方驱动为gpio-sunxi.ko,位于 ...

cubieboard
2014/08/22
0
0
GPIO操作原理(Linux一切皆文件)

系统定义了一切皆文件的原则,甚至于硬件:,,等……,这样的好处是,在不同的平台和硬件上都能形成统一的调用方式。 这里,我们从,探讨下的操作原理(非内核原理):通过 sysfs 方式控制 ...

dingdayu
2018/09/08
0
0
Android应用层操作GPIO

Android应用层操作GPIO的方法: http://my.oschina.net/u/1176566/blog/177554 在使用某个GPIO之前首先的保证此GPIO没有正在被使用,否则是无法操作的; 如NAND模块的NCE3/PC18,此io口正被使...

wangjian19
2014/07/28
0
5
把GPIO 通过sysfs导出到 用户空间

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

wangjian19
2013/11/19
0
0
嵌入式linux系统的开发——GPIO及LED/KEY的功能实现

GPIO功能注册和控制 MT7688支持引脚功能的复用,通过配置GPIO1MODE和GPIO2MODE寄存器可指定引脚的功能,通常在dts文件中对引脚功能进行注册。 MT7688引脚的GPIO注册位于/target/linux/ramip...

元宵大师
2018/07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

百度黄埔学院将培养一批首席AI架构师,为“国之重器”赋能

深度学习高端人才不仅是AI发展的重要养分,也是企业转型AI巨大推动力。2019年1月19日,百度黄埔学院——深度学习架构师培养计划在百度科技园举行开学典礼,深度学习技术及应用国家工程实验室...

深度学习之桨
30分钟前
2
0
扒站wget仿站

wget -c -r -p -np -k http://xxx.com/xxx 其中: -c, --continue (断点续传) 接着下载没下载完的文件 -r, --recursive(递归) specify recursive download.(指定递归下载) -p, --page...

临江仙卜算子
32分钟前
2
0
Nextjs+React非页面组件SSR渲染

@随风溜达的向日葵 Nextjs Nextjs是React生态中非常受欢迎的SSR(server side render——服务端渲染)框架,只需要几个步骤就可以搭建一个支持SSR的工程(_Nextjs_的快速搭建见Next.js入门)...

随风溜达的向日葵
今天
0
0
如何在 Linux 系统查询机器最近重启时间

在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名...

来来来来来
今天
3
0
Redis协议是什么样的

前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端? 其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。 我们...

春哥大魔王的博客
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部