转自:linux操作GPIO通用sysfs方法 - 迪卡魏曼依奇君的博客 - CSDN博客 https://blog.csdn.net/tunqimai9331/article/details/82868190
查找/sys/class/gpio目录,如果没有,则在编译内核时,加入Device Drivers->GPIO Support->/sys/class/gpio/...(sysfs interface)。
linux2.6及以上的内核可以使用系统中的GPIOLIB模块在用户空间提供的sysfs接口,实现应用层对GPIO的独立控制。
Linux开发平台实现了通用GPIO的驱动,用户通过Shell命令或系统调用即能控制GPIO的输出和读取输入值。其属性文件均在/sys/class/gpio目录下,如:
-
#ls /sys/
class/gpio/
-
export gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport
属性文件有export和unexport。其余四个文件为符号链接(gpiochip0,gpiochip32,gpiochip64,gpiochip96),指向管理对应设备的目录,以gpiochip0为例,此目录下文件有:
-
#ls /sys/
class/gpio/gpiochip0
-
base
label ngpio power subsystem uevent
以上文件用途如表所示。
文件名 | 路径 | 作用 |
export | /sys/class/gpio/export | 导出GPIO |
unexport | /sys/class/gpio/unexport | 将导出的GPIO从sysfs中清除 |
gpiochipN | /sys/class/gpio/gpiochipN/base | 设备所管理的GPIO初始编号 |
/sys/class/gpio/gpiochipN/label | 设备信息 | |
/sys/class/gpio/gpiochipN/ngpio | 设备所管理的GPIO总数 | |
/sys/class/gpio/gpiochipN/power | 设备供电方面的相关信息 | |
/sys/class/gpio/gpiochipN/subsystem | 符号链接,指向父目录 | |
/sys/class/gpio/gpiochipN/uevent | 内核与udev(自动设备发现程序)之间的通讯接口 |
向export文件写入需要操作的GPIO排列序号N,就可以导出对应的GPIO设备目录:
操作命令如下:
#echo N > /sys/class/gpio/export
例如,导出序号为68的GPIO的操作接口,在Shell下,可以用如下命令:
#echo 68 > /sys/class/gpio/export
通过以上操作后,在/sys/class/gpio目录下生成gpioN目录,通过读写该目录下的属性文件就可以操作这个GPIO的输入和输出。以此类推可以导出其它GPIO设备目录。如果GPIO已经被系统占用,导出时候会提示资源占用。
以排列序号为68的GPIO为例,设备目录下有如下属性文件:
-
#ls /sys/class/gpio/gpio68/
-
active_low edge subsystem
value direction power uevent
各个文件用途如下表。
文件名 | 路径 | 作用 |
active_low | /sys/class/gpio/gpioN/active_low | 具有读写属性。用于决定value中的值是否翻转。0不翻转,1翻转。 |
edge | /sys/class/gpio/gpioN/edge | 具有读写属性。设备GPIO中断,或检测中断是否发生。 |
subsystem | /sys/class/gpio/gpioN/subsystem | 符号链接,指向父目录。 |
value | /sys/class/gpio/gpioN/value | 具有读写属性。GPIO的电平状态设置或读取。 |
direction | /sys/class/gpio/gpioN/direction | 具有读写属性。用于查看或设置GPIO输入输出 |
uevent | /sys/class/gpio/gpioN/uevent | 内核与udev(自动设备发现程序)之间的通讯接口 |
GPIO基本操作
在应用层我们可以通过Shell命令操作GPIO。通过以下步骤,就可以控制GPIO输入输出。下面步骤是以GPIO的输入输出功能进行介绍。
1.输入输出设置
GPIO导出后默认为输入功能。向direction文件写入“in”字符串,表示设置为输入功能;向directon文件写入“out”字符串,表示设置为输出功能。读direction文件,会返回in/out字符串,in表示当前GPIO作为输入,out表示当前GPIO作为输出。方向查看和设置命令如下:
-
#cat /sys/
class/gpio/gpioN/direction #查看方向
-
#echo
out > /sys/
class/gpio/gpioN/direction #设置为输出
-
#echo
in > /sys/
class/gpio/gpioN/direction #设置为输入