注:本文基于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

Logo

更多推荐