Linux input子系統(tǒng)框架--Apple的學習筆記

按鍵中斷解決irq_of_parse_and_map返回0的問題--Apple的學習筆記我為了復習相關函數(shù)和io模型,所以自己寫按鍵中斷,其實linux中有input子系統(tǒng)就像pinctrl子系統(tǒng)一樣,已經(jīng)抽象的寫好了按鍵驅(qū)動。因為一般的驅(qū)動就是要實現(xiàn)open,read,write的io模型。所以linux內(nèi)核都幫我們寫好了。我們可以復用。到document的input文件夾中看相關幫助資料。網(wǎng)上資料也一大堆。

A.今天的學習目標:

  1. 看內(nèi)核代碼,熟悉input子系統(tǒng)框。
  2. 會參考已經(jīng)有的input子系統(tǒng)driver,自己使用input子系統(tǒng)框架來實現(xiàn)按鍵中斷driver。
  3. 直接使用gpio-key的driver來實現(xiàn)按鍵中。

B.input子系統(tǒng)框?qū)W習

image.png

linux內(nèi)核空間主要分三層
a,驅(qū)動層:輸入設備的具體驅(qū)動程序
b, 核心層:承上啟下,為驅(qū)動層提供輸入設備注冊的操作接口,通知事件層對輸入事件進行處理
c,事件層:和用戶空間交互。

C.input子系統(tǒng)關鍵數(shù)據(jù)結(jié)構

input_dev 輸入設備
input_handler 事件處理器
input_handle 連接結(jié)構體
我本來在想為什么要加一個input_handle,直接連接dev和handler不就可以了。后來網(wǎng)上查了,因為不是一對一而是可以1對多的關系。一個設備可以對應多個事件,一個事件也可以對應多個設備。

D.內(nèi)核代碼分析

input_register_handler開始到最后connect,可以參考
12.Linux之輸入子系統(tǒng)分析(詳解),此文描述的比較好。

image.png

E.實踐

實驗1,使用input子系統(tǒng),自己寫驅(qū)動。--已完成
實驗2,直接使用gpio-key,通過修改設備樹完成驅(qū)動。--已完成

F.小結(jié)

一,關于中斷中的鎖使用

  1. spin_lock--不會關中斷,某進程鎖住了,然后中斷處理程序中也使用了此時由于某進程被掛起,導致中斷程序獲取不了資源而產(chǎn)生死鎖。
  2. spin_lock_irq--進入中斷會關閉中斷,退出的時候是開啟的。
  3. spin_lock_irqsave--進入的時候會關閉中斷,退出的時候會恢復之前的中斷狀態(tài)。

G.參考網(wǎng)址

4. Linux - 輸入子系統(tǒng)框架詳解
Linux 輸入子系統(tǒng)

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容