应用层通过/sys/class/gpio文件操作gpio口

Posted 正在起飞的蜗牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用层通过/sys/class/gpio文件操作gpio口相关的知识,希望对你有一定的参考价值。

1、内核gpio子系统介绍

应用层通过sysfs操作gpio的前提是内核中已经向gpio子系统注册了gpio资源,并且在/sys/class/目录下可以看到gpio类。
详细情况参考博客:《2.6.35内核的gpio子系统详解》

2、/sys/class/gpio目录

(1)gpio资源对上层应用是以文件的形式呈现的,应用操作gpio口就是读写相应的文件;
(2)gpiochipxx:每个文件夹对应一个端口,名字的末尾是端口中第一个gpio口在内核中的编号;
(3)每个gpiochipxx文件夹下面都有base、label、ngpio文件,base文件里保存的是gpio端口中第一个gpio口在内存中的编号,label文件保存gpio端口的名字,ngpio文件保存gpio端口中gpio口的数目,这些数据是和内核中用来表示gpio端口的struct gpio_chip结构体对应的;
(4)分析gpiochip0端口:gpio端口名字是45f0000.gpio_chip(一般和数据手册中gpio端口的名字一样),端口包含8个gpio口,第一个gpio口在内核的编号是0,所以该端口包含0-7号gpio口;

3、export文件和unexport文件

(1)上面的gpiochipxx文件夹都是描述的端口的信息,并且都是只读的,但是我们在操作gpio口时是操作单个gpio口不是操作整个gpio端口;
(2)export和unexport文件就是用来导出单个gpio口的,用法就是往这两个文件写入gpio口在内核中的编号,gpio口编号可以在gpiochipxx文件中查到;
(3)上面就是将编号17的gpio口导出,然后将gpio口从输入模式改为输出模式,gpio口的值是0(低电平);
(4)如果不需要gpio口,用"echo 17 > unexport"命令撤销对17号gpio口的导出;

4、操作gpio口

(1)通过数据手册和gpiochipxx文件夹查询到gpio口在内核中的编号;
(2)向export文件写入gpio口编号,导出gpio口;
(3)通过读写gpio口导出的文件,操作gpio口;
(4)向unexport文件写入gpio口编号,撤销gpio口的导出;

以上是关于应用层通过/sys/class/gpio文件操作gpio口的主要内容,如果未能解决你的问题,请参考以下文章

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

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

linux下对/sys/class/gpio中的gpio的控制

RK3399平台开发系列讲解(内核调试篇)9.21/sys/class/gpio调试

树莓派上的GPIO字符驱动程序

GPIO编程1:用文件IO的方式操作GPIO