http://blog.csdn.net/mirkerson/article/details/8464231
在嵌入式設備中對GPIO的操作是最基本的操作。一般的做法是寫一個單獨驅動程序,網上大多數的例子都是這樣的。其實Linux下面有一個通用的GPIO操作接口,那就是我要介紹的 “/sys/class/gpio” 方式。
首先,看看系統中有沒有“/sys/class/gpio”這個文件夾。如果沒有請在編譯內核的時候加入 Device Drivers —> GPIO Support —> /sys/class/gpio/… (sysfs interface)。
/sys/class/gpio 的使用說明:
01 |
gpio_operation 通過/sys/文件接口操作IO端口 GPIO到文件系統的映射 |
02 |
* 控制GPIO的目錄位於/sys/ class /gpio |
03 |
* /sys/ class /gpio/export文件用於通知系統需要導出控制的GPIO引腳編號 |
04 |
* /sys/ class /gpio/unexport 用於通知系統取消導出 |
05 |
* /sys/ class /gpio/gpiochipX目錄保存系統中GPIO寄存器的信息,包括每個寄存器控制引腳的起始編號base,寄存器名稱,引腳總數 導出一個引腳的操作步驟 |
06 |
* 首先計算此引腳編號,引腳編號 = 控制引腳的寄存器基數 + 控制引腳寄存器位數 |
07 |
* 向/sys/ class /gpio/export寫入此編號,比如12號引腳,在shell中可以通過以下命令實現,命令成功后生成/sys/ class /gpio/gpio12目錄,如果沒有出現相應的目錄,說明此引腳不可導出: |
08 |
echo 12 > /sys/ class /gpio/export |
09 |
* direction文件,定義輸入輸入方向,可以通過下面命令定義為輸出 |
10 |
echo out > direction |
11 |
* direction接受的參數:in, out, high, low。high/low同時設置方向為輸出,並將value設置為相應的1/0。 |
下面在2440下進行一下測試
1.取得GPIO信息,在終端中敲入以下命令
2 |
$ for i in gpiochip* ; do echo `cat $i/label`: `cat $i/base` ; done |
終端中顯示如下
2.計算GPIO號碼
我們把GPE11用來控制LED。
GPE0的頭是128,GPE11 就是128+11 = 139.
1 |
$ echo 139 > /sys/ class /gpio/export |
ls 一下看看有沒有 gpio139 這個目錄
3.GPIO控制測試。
控制LED所以是輸出。
所以我們應該執行
1 |
$ echo out > /sys/ class /gpio/gpio139/direction |
之后就可以進行輸出設置了。
1 |
$ echo 1 > /sys/ class /gpio/gpio139/value |
or
1 |
$ echo 0 > /sys/ class /gpio/gpio139/value |