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口的导出;