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...