查找/sys/class/gpio目錄,如果沒有,則在編譯內核時,加入Device Drivers->GPIO Support->/sys/class/gpio/...(sysfs interface)。
linux2.6及以上的內核可以使用系統中的GPIOLIB模塊在用戶空間提供的sysfs接口,實現應用層對GPIO的獨立控制。
Linux開發平臺實現了通用GPIO的驅動,用戶通過Shell命令或系統調用即能控制GPIO的輸出和讀取輸入值。其屬性文件均在/sys/class/gpio目錄下,如:
#ls /sys/class/gpio/
export gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport
屬性文件有export和unexport。其餘四個文件爲符號鏈接(gpiochip0,gpiochip32,gpiochip64,gpiochip96),指向管理對應設備的目錄,以gpiochip0爲例,此目錄下文件有:
#ls /sys/class/gpio/gpiochip0
base label ngpio power subsystem uevent
以上文件用途如表所示。
文件名 | 路徑 | 作用 |
export | /sys/class/gpio/export | 導出GPIO |
unexport | /sys/class/gpio/unexport | 將導出的GPIO從sysfs中清除 |
gpiochipN | /sys/class/gpio/gpiochipN/base | 設備所管理的GPIO初始編號 |
/sys/class/gpio/gpiochipN/label | 設備信息 | |
/sys/class/gpio/gpiochipN/ngpio | 設備所管理的GPIO總數 | |
/sys/class/gpio/gpiochipN/power | 設備供電方面的相關信息 | |
/sys/class/gpio/gpiochipN/subsystem | 符號鏈接,指向父目錄 | |
/sys/class/gpio/gpiochipN/uevent | 內核與udev(自動設備發現程序)之間的通訊接口 |
向export文件寫入需要操作的GPIO排列序號N,就可以導出對應的GPIO設備目錄:
操作命令如下:
#echo N > /sys/class/gpio/export
例如,導出序號爲68的GPIO的操作接口,在Shell下,可以用如下命令:
#echo 68 > /sys/class/gpio/export
通過以上操作後,在/sys/class/gpio目錄下生成gpioN目錄,通過讀寫該目錄下的屬性文件就可以操作這個GPIO的輸入和輸出。以此類推可以導出其它GPIO設備目錄。如果GPIO已經被系統佔用,導出時候會提示資源佔用。
以排列序號爲68的GPIO爲例,設備目錄下有如下屬性文件:
#ls /sys/class/gpio/gpio68/
active_low edge subsystem value direction power uevent
各個文件用途如下表。
文件名 | 路徑 | 作用 |
active_low | /sys/class/gpio/gpioN/active_low | 具有讀寫屬性。用於決定value中的值是否翻轉。0不翻轉,1翻轉。 |
edge | /sys/class/gpio/gpioN/edge | 具有讀寫屬性。設備GPIO中斷,或檢測中斷是否發生。 |
subsystem | /sys/class/gpio/gpioN/subsystem | 符號鏈接,指向父目錄。 |
value | /sys/class/gpio/gpioN/value | 具有讀寫屬性。GPIO的電平狀態設置或讀取。 |
direction | /sys/class/gpio/gpioN/direction | 具有讀寫屬性。用於查看或設置GPIO輸入輸出 |
uevent | /sys/class/gpio/gpioN/uevent | 內核與udev(自動設備發現程序)之間的通訊接口 |
GPIO基本操作
在應用層我們可以通過Shell命令操作GPIO。通過以下步驟,就可以控制GPIO輸入輸出。下面步驟是以GPIO的輸入輸出功能進行介紹。
1.輸入輸出設置
GPIO導出後默認爲輸入功能。向direction文件寫入“in”字符串,表示設置爲輸入功能;向directon文件寫入“out”字符串,表示設置爲輸出功能。讀direction文件,會返回in/out字符串,in表示當前GPIO作爲輸入,out表示當前GPIO作爲輸出。方向查看和設置命令如下:
#cat /sys/class/gpio/gpioN/direction #查看方向
#echo out > /sys/class/gpio/gpioN/direction #設置爲輸出
#echo in > /sys/class/gpio/gpioN/direction #設置爲輸入
未完..........
參考ZLG