Linux-利用sysfs控制gpio

转自: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目录下,如:


 
 
  1. #ls /sys/ class/gpio/
  2. export gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport

属性文件有export和unexport。其余四个文件为符号链接(gpiochip0,gpiochip32,gpiochip64,gpiochip96),指向管理对应设备的目录,以gpiochip0为例,此目录下文件有:


 
 
  1. #ls /sys/ class/gpio/gpiochip0
  2. 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为例,设备目录下有如下属性文件:


 
 
  1. #ls /sys/class/gpio/gpio68/
  2. 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作为输出。方向查看和设置命令如下:


 
 
  1. #cat /sys/ class/gpio/gpioN/direction #查看方向
  2. #echo out > /sys/ class/gpio/gpioN/direction #设置为输出
  3. #echo in > /sys/ class/gpio/gpioN/direction #设置为输入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值