如何計算Linux中GPIO的編號並且操作它?
首先簡單介紹一下Linux的gpio子系統:
Linux是一個龐大的系統,除了支援pc以外,還支援很多嵌入式的開發板。而種類繁多的開發板的GPIO驅動往往都不同,這就是使得驅動工程師不得不對於每一種開發板都設計一套GPIO驅動來,而且長此以往Linux核心會被這類無意義的程式碼所佔據,因此Linux引入了GPIO子系統的架構來解決這個問題。
具體想要了解GPIO子系統的請參考蝸窩科技上的文章
言歸正傳:
如果你在驅動中註冊了GPIO Controller那麼我們就可以在linux系統的應用層查詢到它,並且根據GPIO Controller的“base number”計算出我們要使用的引腳的真實引腳編號。
應用層我們可以透過sysfs訪問GPIO(樹莓派的IO控制庫
wiringPI
用的就是這個方法)。
具體方法如下:
在開發板系統的 /sys/class/gpio的目錄下,找到gpiochipXX 目錄,如下圖
進入某一個gpiochipxx的目錄中,檢視檔案lable內容,以gpiochip128為例:獲取到地址為“20ac000”。
使用這個地址,與裝置樹中的地址對應,查詢裝置樹,發現gpio5 與之對應
由此可以確定gpio5這組引腳的基準腳就是128。
如果想操作GPIO5_IO14 這個引腳的話,就需要操作gpio128這個控制器並且引腳的編號為128+14
例子:
我以我手中的imx6ull 開發板為例,舉例說明如何操作這個引腳。
使用引腳是GPIO5_3,按照之前的計算,這個引腳的編號應該是128+3=131
匯入GPIO:這個編號匯入到export檔案中
匯入完成後會在gpio資料夾中建立一個GPIO131的資料夾
,使用者透過操作這個資料夾中的檔案實現對gpio的控制。
設定方向:
設定LED狀態:
解除安裝GPIO:將解除安裝編號寫入unexport中
操作完成後,gpio131 資料夾自動被刪除。
至此計算GPIO的編號和操作方法就講完了。