本方法是linux系統中操作gpio的通用方法,初學者或硬體工程師可以通過該方法對晶元的gpio口進行簡單的控制。
在linux核心中進入路徑:
sys/class/gpio
在該路徑下有export和unexport 2個節點,其分別的作用為:
export: 建立gpio控制節點。
unexport:刪除已建立的gpio控制節點。
如果我們需要建立或刪除乙個gpio的控制節點,可以使用以下的命令:
建立乙個gpio節點:echo xx > /sys/class/gpio/export
(xx為晶元引腳號)
刪除乙個gpio節點:echo xx > /sys/class/gpio/unexport
(xx為晶元引腳號)
注意:1.晶元引腳號大多數情況下在晶元手冊內有指定演算法,無法的確定的話,可能要諮詢晶元廠商或作業系統廠商。
2.注意輸入指令的空格,在「>」前的空格不能少,否則指令會無效,如果採用「xx」格式可以沒有空格!如:echo 「xx」> /sys/class/gpio/export
。
3.輸入指令後,提示錯誤或者無反應(有無提示和作業系統有關)則引腳號錯誤,無法建立gpio節點。
示例(採用飛騰ft1500a晶元+銀河麒麟伺服器系統,建立gpio口a塊a0控制節點):
在終端中輸入:echo 504 > /sys/class/gpio/export
,可以在/sys/class/gpio
目錄下多乙個資料夾gpio504
在終端中輸入:echo 504 > /sys/class/gpio/unexport
,可以將gpio504
刪除
完成gpio介面的建立後,會生成對應gpio介面的資料夾gpio***,在資料夾內,可以看到direction這個檔案。
direction代表著當前gpio的方向(輸入或輸出),我們可以通過以下指令進行檢視
cd /sys/class/gpio/gpio***
cat direction
這時候螢幕會列印出值,in或者out。
in代表該gpio為輸入方向。
out代表該gpio為輸出方向。
根據實際應用的需求,我們可以通過以下指令控制該gpio的方向(在/sys/class/gpio/gpio***
目錄下):
設定為輸出:echo out > direction
設定為輸入:echo in > direction
完成gpio介面的建立後,會生成對應gpio介面的資料夾gpio***,在資料夾內,可以看到value這個檔案。
value代表著當前gpio的電平(高或低),我們可以通過以下指令進行檢視
cd /sys/class/gpio/gpio***
cat value
這時候螢幕會列印出值,1或者0。
1代表該gpio為高電平。
0代表該gpio為低電平。
根據實際應用的需求,我們可以通過以下指令控制該gpio的電平(在/sys/class/gpio/gpio***
目錄下):
設定為高電平:echo 1 > value
設定為低電平:echo 0 > value
為了方便讀者的理解這邊做2個示例。
示例1: 要求晶元引腳504 的gpio口作為輸出,且輸出為高電平
cd /sys/class/gpio
echo 504 > /sys/class/gpio/export
cd gpio504
echo out > direction
echo 1 > value
示例2: 要求晶元引腳505 的gpio口作為輸入,並檢視採集到的電平
cd /sys/class/gpio
echo 505 > /sys/class/gpio/export
cd gpio505
echo in > direction
cat value
除了通過命令列的控制gpio,我們也可以通過應用**的方式進行控制。由於linux本質上均是檔案,因此採用檔案操作及可以對gpio進行控制。
以要求晶元引腳504 的gpio口作為輸出,且輸出為高電平為示例
#include #include #include #include int main(void)
linux gpio子系統級聯中斷解析
linux 4.9 drivers pinctrl 中的gpio子系統中斷級聯解析 dts相關 中斷相關的device tree知識回顧 想要進行對映,首先要了解interrupt controller的拓撲結構。系統中的interrupt controller的拓撲結構以及其interrupt r...
Cacheable不生效的原因 方法內呼叫
乙個類中有方法a和方法b,呼叫方法a時,每次都會呼叫資料庫。和期望不符。方法a public manager info 方法b cacheable key id public manager info long id spring 快取註解是基於spring aop切面,必須走 才能生效,同類呼叫或...
跨頁面呼叫方法 微服務間的呼叫和應用內呼叫有啥區別
目前大部分的系統架構都是微服務架構,就算沒有註冊中心 服務管理,也肯定是多個服務,單體服務比較少了。大家平時需要在應用內呼叫rpc介面也比較多,那麼有沒有思考過微服務之間的呼叫和應用內直接呼叫有什麼區別呢?面試時是不是經常被被問到微服務呢,本篇文章針對微服務間的方法呼叫和應用內方法呼叫的有啥區別這個...