具体请参考: http://blog.csdn.net/u014213012/article/details/53140781
这里要注意的是:
要让linux支持文件io方式操作gpio,首先驱动必须得支持,也就是说设备树上必须先配置好gpio模式,然后参照以上链接去实现gpio操作
这里举例来说:hud项目中(imx6dl平台),有一个蓝牙电源的使能受GPIO1_IO30的控制,所以我们必须得在设备树上配置这个pad为GPIO模式
1.配置gpio模式
现在需要在设备树上配置GPIO1_IO32用于gpio, 在配置之前需要确定该pad为哪个pad, 经原理图可知为ENET_TXD0/GPIO1_IO30, 然后在imx6dl规格书上第四章External Signals and Pin Multiplexing章节查找到ENET_TXD0, 可以看出该pad可以复用成三种功能(ENET_TX_DATA0, ESAI_TX4_RX1, GPIO1_IO30), 这些宏定义在imx6dl-pinfunc.h文件中, 然后在用到的设备树上(imx6dl-hud.dtsi)上查找是否已经有用到其他功能(现在要配置成gpio功能, 若已经配置成ENET_TX_DATA0则要删除它)
MX6QDL_PAD_ENET_TXD0__GPIO1_IO30 0x80000000 /* bluetooth power enable */
这样就配置好了gpio模式
然后使用文件io操作gpio:
2.计算gpio号:
nr=(P -1)* 32 + N; gpioP_N;
这里nr=(1-1)*32 + 30=30
3.io文件操作gpio
echo 30 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio30/direction
echo 1 > /sys/class/gpio/gpio30/value ---> 写高电平
echo 0 > /sys/class/gpio/gpio30/value ---> 写低电平