具體請參考: 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 ---> 寫低電平