linux 輸入子系統 input dev

2021-09-30 07:48:56 字數 2041 閱讀 5576

linux 系統提供了input子系統,按鍵、觸控螢幕、鍵盤、滑鼠等輸入都可以利用input介面函式來實現裝置驅動,因此,12.1~12.2節的按鍵和觸控螢幕裝置驅動都可以作為input裝置驅動而實現。

在linux 核心中,input裝置用input_dev 結構 體描述,使用input子系統實現輸入裝置驅動的時候,驅動的核心工作是向系統報告按鍵、觸控螢幕、鍵盤、滑鼠等輸入事件(event,通過input_event結構 體描述),不再需要關心檔案操作介面,因為input子系統已經完成了檔案操作介面。驅動報告的事件經過inputcore和 eventhandler最終到達使用者空間。

通過input子系統,具體的輸入裝置驅動只需要完成如下工作。

l 在模組載入函式中告知input子系統它可以報告的事件。

裝置驅動通過set_bit()告訴input子系統它支援哪些事件,如下所示:

set_bit(ev_key, button_dev.evbit);

l 在模組載入函式中註冊輸入裝置。

註冊輸入裝置的函式為:

int input_register_device(struct input_dev

*dev);

l 在鍵被按下/抬起、觸控螢幕被觸控/抬起/移動、滑鼠被移動/單擊/抬起時通過input_ report_***()報告發生的事件及對應的鍵值/座標等狀態。

主要的事件型別包括ev_key(按鍵事件)、ev_rel(相對值,如游標移動,報告的是相對最後一次位置的偏移)和ev_abs(絕對值,如觸控螢幕和操縱桿,它們工作在絕對座標系統)。

用於報告ev_key、ev_rel和ev_abs事件的函式分別為:

void input_report_key(struct input_dev

*dev, unsigned int code, int value);

void input_report_rel(struct input_dev

*dev, unsigned int code, int value);

void input_report_abs(struct input_dev

*dev, unsigned int code, int value);

input_sync()用於事件同步,它告知事件的接收者驅動已經發出了乙個完整的報告。

例如,在觸控螢幕裝置驅動中,一次座標及按下狀態的整個報告過程如下:

input_report_abs(input_dev

, abs_x, x);  //x座標

input_report_abs(input_dev

, abs_y, y);   //y座標

input_report_abs(input_dev

, abs_pressure, pres); //壓力

input_sync(input_dev

);  //同步

在模組解除安裝函式中登出輸入裝置。登出輸入裝置的函式為:

void input_unregister_device(struct input_dev

*dev);

**清單12.28給出了乙個最簡單的使用input介面實現按鍵裝置驅動的範例,它在中斷服務程式中向系統報告按鍵及同步事件。

**清單12.28 最簡單的input裝置驅動

1  /*在按鍵中斷中報告事件*/

2  static void button_interrupt(int irq, void *dummy, struct pt_regs *fp)

3  7 

8  static int _ _init button_init(void)

9  16

17   button_dev.evbit[0] = bit(ev_key);    //支援ev_key事件

18   button_dev.keybit[long(btn_0)] = bit(btn_0);

19 20   input_register_device(&button_dev);   //註冊input裝置

21 }

22 23 static void _ _exit button_exit(void)

24

linux驅動 Input 輸入子系統

1,哪些驅動裝置使用驅動子系統更方便簡單?像按鍵,觸控螢幕,滑鼠等輸入裝置我們可以採用input介面函式來實現裝置驅動,那麼採用input輸入子系統有什麼優點?其實一句話,採用input輸入子系統可以使驅動程式變得異常簡單。2,input輸入子系統的體系結構 主要包括三大體系結構 裝置驅動層driv...

Linux裝置驅動 input輸入子系統

不同的輸入裝置 如按鍵 鍵盤 觸控螢幕 滑鼠等 都有它們的差異性 如中斷 讀鍵值 座標值是裝置相關的 及共同性 如輸入事件的緩衝區管理以及字元裝置驅動的file operations介面則對輸入裝置是通用的 因此在linux核心中設計了input輸入子系統來完成輸入裝置之間的共性工作,而我們只需要使...

Linux驅動之input輸入子系統

input輸入子系統在實際專案中用的也比較多,按鍵,觸控螢幕,滑鼠,鍵盤等,用來實現核心層和應用層資料之間的傳遞,這裡得說明不只有input,還有copy to user等,利用input的好處是我們用自己上傳資料到應用程式,我們直接上報這個事件發生了,input自帶的機制會實現上傳的功能。還有很多...