Linux下 INPUT子系統

2021-10-03 15:50:57 字數 2354 閱讀 1352

1.申請input_dev結構體變數

在編寫 input 裝置驅動的時候我們需要先申請乙個 input_dev 結構體變數,使用input_allocate_device 函式來申請乙個 input_dev

函式原型:

struct input_dev *input_allocate_device(void)

2.釋放input_dev

使用 input_free_device 函式來釋放掉前面申請到的input_dev

函式原型:

void input_free_device(struct input_dev *dev)

3.註冊input_dev

申請好乙個 input_dev 以後就需要初始化這個 input_dev,需要初始化的內容主要為事件型別(evbit)和事件值(keybit)這兩種。input_dev 初始化完成以後就需要向 linux 核心註冊 input_dev了,需要用到 input_register_device 函式,此函式原型如下:

int input_register_device(struct input_dev *dev)

4.登出input_dev

登出 input 驅動的時候也需要使用 input_unregister_device 函式來登出掉前面註冊

的 input_dev,input_unregister_device 函式原型如下:

void input_unregister_device(struct input_dev *dev)

使用input_allocate_device申請乙個input_dev

初始化input_dev

使用input_register_device註冊input_dev

使用input_unregister_device登出input_dev

使用input_free_device 釋放input_dev

當我們向 linux 核心註冊好 input_dev 以後還不能使用 input 裝置,input 裝置都是具有輸入功能的,但是具體是什麼樣的輸入值 linux 核心是不知道的,我們需要獲取到具體的輸入值,或者說是輸入事件,然後將輸入事件上報給 linux 核心。我們需要在按

鍵中斷處理函式,或者消抖定時器中斷函式中將按鍵值上報給 linux 核心,這樣 linux 核心才能獲取到正確的輸入值。不同的事件,其上報事件的 api 函式不同。

input_event 函式用於上報指定的事件以及對應的值

void input_event(struct input_dev *dev,

unsigned int type,

unsigned int code,

int value)

dev:需要上報的 input_dev。

type: 上報的事件型別,比如 ev_key。

code :事件碼,也就是我們註冊的按鍵值,比如 key_0、key_1 等等。

value:事件值,比如 1 表示按鍵按下,0 表示按鍵鬆開。

上報按鍵事件一般使用input_report_key函式,函式原型如下

static inline void input_report_key(struct input_dev *dev,

unsigned int code, int value)

當我們上報事件以後還需要使用 input_sync 函式來告訴 linux 核心 input 子系統上報結束,函式原型如下:

void input_sync(struct input_dev *dev)

dev:需要上報同步事件的 input_dev。

當按鍵按下後使用input_report_key函式上報按鍵事件

使用input_sync函式告訴核心上報結束

struct input_event ;
time:時間,也就是此事件發生的時間此成員變數為 32 位。

type :事件型別,比如 ev_key,表示此次事件為按鍵事件,此成員變數為 16 位。

code :事件碼,比如在 ev_key 事件中 code 就表示具體的按鍵碼,如:key_0、key_1等等這些按鍵。此成員變數為 16 位。

value :值,比如 ev_key 事件中 value 就是按鍵值,表示按鍵有沒有被按下,如果為 1 的話說明按鍵按下,如果為 0 的話說明按鍵沒有被按下或者按鍵鬆開了。

所有的輸入裝置最終都是按照 input_event 結構體呈現給使用者的,使用者應用程式可以通過 input_event 來獲取到具體的輸入事件或相關的值,比如按鍵值等。

Linux下的Input子系統(三)

三 測試 至此為止,我們已經講完了輸入子系統的裝置驅動層,核心層,事件處理層的關係和相關 現在,我們通過基於mini2440的開發板,將輸入子系統融入按鍵驅動,編寫裝置驅動程式,動態載入到核心,並且編寫應用層程式,測試按鍵驅動。我們已經配置了mini2440的串列埠配置,然後根據mini2440開發...

linux核心input子系統解析

android x windows qt等眾多應用對於linux系統中鍵盤 滑鼠 觸控螢幕等輸入裝置的支援都通過 或越來越傾向於標準的input輸入子系統。因為input子系統已經完成了字元驅動的檔案操作介面,所以編寫驅動的核心工作是完成input系統留出的介面,工作量不大。但如果你想更靈活的應用它...

linux核心input子系統解析

華清遠見嵌入式學院 講師。android x windows qt等眾多應用對於linux系統中鍵盤 滑鼠 觸控螢幕等輸入裝置的支援都通過 或越來越傾向於標準的input輸入子系統。因為input子系統已經完成了字元驅動的檔案操作介面,所以編寫驅動的核心工作是完成input系統留出的介面,工作量不大...