input輸入子系統講解

        Linuxinput子系統提供了輸入設備的驅動框架,比如鼠標、鍵盤、觸摸屏等就屬於輸入設備。Linux中關於input子系統的文檔在Documentation/input目錄,input的核心代碼在input.cinput.h中。

 

 

 

        input_handle, input_handler, input_dev

input_handle, input_handler, input_devinput子系統中最重要的3個數據結構。

 

 

        (1)input_handler用於上層應用獲取輸入事件。上層應用打開輸入設備的設備節點,然後對節點進行讀寫操作以獲得鼠標移動信息,或者鍵盤信息等等。這裏對設備節點的文件操作函數就是由input_handler提供。

 

 

 

 

 

 

       (2)input_dev代表的是具體的設備,比如鼠標、鍵盤等等。 

        對於一臺Linux電腦,可能會連着多個鼠標、多個鍵盤。每一個鼠標都能控制光標的運動,每一個鍵盤也都能正常使用。這在input子系統中,體現爲一個input_handle關聯多個input_dev,能夠同時從多個input_dev獲取輸入消息。與此同時,linux中可能會有多個device節點同時與一個input具體設備關聯,這樣,應用程序通過任何一個設備節點,都可以獲得例如鼠標、鍵盤等具體設備的輸入信息。所以,input_devinput_handler之間是多對多的關聯關係,而這些關聯就是由input_handle表示。

 

 

 

        (3)handlerdev之間關聯的建立

   首先看看input_handle的結構體成員:

        input_handle中包含一個input_dev的指針和一個input_handler的指針,所以能建立handlerdev之間的一個一對一的關聯。在input_handler中,有一個鏈表h_list,指向和這個handler關聯的所有input_handle,通過這些handle就可以找到與handler關聯的所有dev。同樣的,在input_dev中,也有一個鏈表h_list,指向與dev關聯的所有input_handle,通過這些handle可以找到與dev相關的所有handler。通過這兩個鏈表和input_handleinput_handlerinput_dev之間建立了一個複雜的網狀結構。

 

    那麼,input_handlerinput_dev之間建立關聯的規則是什麼?即在什麼情況下需要建立關聯,什麼時候不需要建立關聯?這就需要handlerdev之間有一個匹配機制。

 

        input_handler中有兩個指針,id_tableblacklist,其中blacklist是黑名單,凡是與之匹配的dev都將被強制過濾;而與id_table中任意一項匹配的dev才能與handler建立關聯。

 -------------------------------------------------------------------------

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章