另外,鍵盤又屬于輸入設備,Linux內核提供了輸入子系統,如鍵盤、觸摸屏、鼠標等輸入設備都可以利用輸入子系統的接口函數來實現設備驅動[4]。輸入子系統由核心層(Input Core)、驅動層和事件處理層(Event Handler)三部分組成[9]。在Linux內核中,使用輸入子系統實現輸入設備驅動的時候,驅動的核心工作是向系統報告按鍵、觸摸屏、鼠標等輸入事件,而不再需要關心文件操作接口,因為輸入子系統已經完成了文件操作接口。通過輸入子系統,實現輸入設備驅動時只需要完成以下工作:
(1)在模塊加載函數中告知輸入子系統輸入設備可以報告的事件。例如,可通過__set_bit(EV_KEY,input_dev->evbit)來告知輸入子系統該設備可報告按鍵事件。
(2)在模塊加載函數中注冊輸入設備。注冊函數為:int input_register_device(struct input_dev *dev);
(3)當有輸入事件發生時,如按鍵按下/抬起、觸摸屏被觸摸/抬起/移動時,通過input_report_xxx()報告發生的事件及對應的鍵值、坐標等狀態。主要的事件類型包括EV_KEY(按鍵事件)、EV_REL(相對值,如鼠標移動,報告相對于最后一次位置的偏移)和EV_ABS(絕對值,如觸摸屏)。