首先簡單介紹一下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 目錄,如下圖

如何計算Linux中GPIO的編號並且操作它?

進入某一個gpiochipxx的目錄中,檢視檔案lable內容,以gpiochip128為例:獲取到地址為“20ac000”。

如何計算Linux中GPIO的編號並且操作它?

使用這個地址,與裝置樹中的地址對應,查詢裝置樹,發現gpio5 與之對應

如何計算Linux中GPIO的編號並且操作它?

由此可以確定gpio5這組引腳的基準腳就是128。

如果想操作GPIO5_IO14 這個引腳的話,就需要操作gpio128這個控制器並且引腳的編號為128+14

例子:

我以我手中的imx6ull 開發板為例,舉例說明如何操作這個引腳。

如何計算Linux中GPIO的編號並且操作它?

使用引腳是GPIO5_3,按照之前的計算,這個引腳的編號應該是128+3=131

匯入GPIO:這個編號匯入到export檔案中

如何計算Linux中GPIO的編號並且操作它?

匯入完成後會在gpio資料夾中建立一個GPIO131的資料夾

,使用者透過操作這個資料夾中的檔案實現對gpio的控制。

設定方向:

如何計算Linux中GPIO的編號並且操作它?

設定LED狀態:

如何計算Linux中GPIO的編號並且操作它?

解除安裝GPIO:將解除安裝編號寫入unexport中

如何計算Linux中GPIO的編號並且操作它?

操作完成後,gpio131 資料夾自動被刪除。

至此計算GPIO的編號和操作方法就講完了。