linux下GPIO操作
GPIO 用户空间操作
·
注:本文基于linux-3.0.35
#1、 内核配置
可以通过make menuconfig的图形界面来配置
Device Drivers --->
GPIO Support --->
【*】 /sys/class/gpio/...(sysfs interface)
或者:修改配置文件arch/arm/configs/imx6_defconfig
CONFIG_GENERIC_GPIO=y
#2 引脚配置
在内核里配置引脚,以GPIO3 23为例:arch/arm/mach-mx6/board-mx6q_sabreauto.c
static iomux_v3_cfg_t mx6q_sabreauto_pads[] = {
.....
MX6Q_PAD_EIM_D23__GPIO_3_23, // brank 3 gpio23
.....
}
#3 用户层控制
通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等
查看目录:
root@freescale /App$ ls /sys/class/gpio/
export gpiochip0 gpiochip160 gpiochip32 gpiochip96
gpio87 gpiochip128 gpiochip192 gpiochip64 unexport
3.1 计算
nr=(P -1) 32 + N*
(3-1)*32 +23 = 87
###3.2 导出
/sys/class/gpio# echo 87> export
导出后可以看到这个目录下的文件如下:
root@freescale /App$ ls /sys/class/gpio/gpio87/
active_low direction edge power subsystem uevent value
如果不能导出 有可能是GPIO脚被占用,如被别的驱动占用了
###3.3 设置方向
/sys/class/gpio/# echo out > gpio87/direction
###3.4 查看方向
root@freescale /App$ cat /sys/class/gpio/gpio87/direction
out
###3.5 设置输出
root@freescale /App$ echo 1 /sys/class/gpio/gpio87/value
1 /sys/class/gpio/gpio87/value
root@freescale /App$ echo 0 /sys/class/gpio/gpio87/value
0 /sys/class/gpio/gpio87/value
###3.6 查看输出值
root@freescale /App$ cat /sys/class/gpio/gpio87/value
0
3.7 取消导出
root@freescale /App$ echo 87 >/sys/class/gpio/unexport
root@freescale /App$ ls /sys/class/gpio/
export gpiochip128 gpiochip192 gpiochip64 unexport
gpiochip0 gpiochip160 gpiochip32 gpiochip96
参考
https://developer.ridgerun.com/wiki/index.php?title=How_to_use_GPIO_signals#References
https://blog.csdn.net/u014213012/article/details/53140781
linux-3.0.35/documentation/gpio.txt
更多推荐
已为社区贡献3条内容
所有评论(0)