linux操作GPIO通用sysfs方法

查找/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    #设置为输入

未完..........

参考ZLG

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章