Kernel: 4.4
Soc: msm8996
1.用户空间通过sysfs操作GPIO
(1)启用GPIO sysfs interface
首先看系统中有没有“/sys/class/gpio”这个文件夹。如果没有在编译内核的时候打开 Device Drivers-> GPIO Support-> /sys/class/gpio/… (sysfs interface)
(2)用户空间通过sysfs控制GPIO
# echo 9 > /sys/class/gpio/export 执行此命令会在gpio/下生成gpio9目录
# echo out > gpio9/direction 设置GPIO9方向为输出
# echo 1 > gpio9/value 设置GPIO9为高电平
# echo 0 > gpio9/value 设置GPIO9为低电平
# echo 9 > /sys/class/gpio/unexport 关闭对GPIO9的控制
(3)用户空间编程控制GPIO
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #define GPIO9 9 int main(void) { FILE *filep = NULL; int i=0; filep = fopen("/sys/class/gpio/export", "w"); fprintf(filep, "%d", GPIO9); fclose(filep); filep = fopen("/sys/class/gpio/gpio9/direction", "w"); fprintf(filep, "out"); fclose(filep); for(i = 0; i < 50; i++) { printf("gpio9 value is 1. "); filep = fopen("/sys/class/gpio/gpio9/value", "w"); fprintf(filep,"%d",1); sleep(1); fclose(filep); printf("gpio9 value is 0. "); filep = fopen("/sys/class/gpio/gpio9/value", "w"); fprintf(filep, "%d", 0); sleep(1); fclose(filep); } filep = fopen("/sys/class/gpio/unexport", "w"); fprintf(filep, "%d", GPIO9); fclose(filep); return 0; }
2.GPIO使用总结
(1)每个GPIO引脚只能使用gpio_request获取一次,第二次获取就会报-EBUSY,如果知道已经获取了,那么就直接可以使用gpio_set_value()来控制GPIO引脚电平。
(2)使用regulator-fix probe的GPIO无法通过这种sysfs接口来设置GPIO的值,就是更改不了其值。