linux驅動 Input 輸入子系統

2021-08-10 07:37:25 字數 1869 閱讀 8402

1,哪些驅動裝置使用驅動子系統更方便簡單?

像按鍵,觸控螢幕,滑鼠等輸入裝置我們可以採用input介面函式來實現裝置驅動,那麼採用input輸入子系統有什麼優點?其實一句話,採用input輸入子系統可以使驅動程式變得異常簡單。

2,input輸入子系統的體系結構

主要包括三大體系結構

裝置驅動層drivers,輸入核心層input core,事件處理層handers,其中inputcore,handlers是由核心來實現的,程式設計師做的就是利用input core提供的介面函式來實現drivers,

這三層分別具體實現的功能:

裝置驅動層:將底層硬體的輸入轉化為統一的事件形式,想輸入核心層匯報。

輸入核心層:為驅動層提供輸入裝置註冊與操作的介面,如input_register_driver:

通知事件處理層對事件進行處理;

在/proc下產生相應的裝置資訊;

事件處理層:主要作用是和使用者空間進行互動,我們知道linux在使用者空間將所有裝置當成檔案來處理,在一般的驅動程式中都有提供fops介面,以及在/dev下生成相應

的裝置檔案節點,而在輸入子系統中,這些工作由事件處理層來完成。

3,驅動的實現;

1,事件支援

set_bit(ev_key,butt_dev.evbit);

引數button_dev是struct input_dev型別,他有二個成員evbit事件型別和keybit按鍵型別(但並非只有二個),關於事件型別和按鍵型別如下表:

比如我們要支援按鍵1的話需要以下二條語句:

set_bit(ev_key,button_dev.bit);

set_bit(bin_1,button_dev.keybit);

2,註冊:

當input裝置子持了相應的事件之後,就可以將裝置註冊到核心 input_register_device(&button_dev);

3,報告事件與完成報告

當在底層發生了中斷,使用者空間是如何知道的,這就需要inputcore提供一定的上報介面函式,由於報告事件在中斷函式中完成的,所以需要在開始處,註冊裝置中斷

request_irq(button_irq,button_irq,0,"button",null);然後再中斷處理函式中完成報告事件

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

注釋:inb(button_port1)用於讀取按鍵1的狀態,並報告給input core

input_report_key():用於報告ev_key事件狀態

input_report_key():用於報告ev_rel事件狀態

input_report_key():用於報告ev_abs事件狀態

4,在按鍵服務子程式中上報事件

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

input_report_key(&button_dev,bit_0,inb(button_port0);

input_report_key(&button_dev,bit_1,inb(button_port1);

input_sync(&button_dev);

static int __init button_init(void)

if(request_irq(button_irq,button_interrupt,0,"button",null)

return _ebusy;

set_bit(ev_key,button_dev,evbit);

set_bit(bit_0,button_dev.keybit);

set_bit(bit_1,button_dev.keybit);

Linux裝置驅動 input輸入子系統

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

Linux驅動之input輸入子系統

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

input 輸入裝置平台驅動

1,主機環境 vmare下linux5.7 384記憶體。2,編譯編譯環境 arm linux gcc v4.4.3 3,開發板 fl2440,4m nor flash,256m nand flash。移植參照mini2440的示例 1 首先是平台裝置的註冊 include include incl...