前面章節講解了按鍵設備驅動,實際上,在linux系統中,為了實現這類驅動程序,一種更值得推薦的方法是利用input子系統。Linux系統提供了input子系統,按鍵、觸摸屏、鼠標等輸入型設備都可以用input接口函數來實現設備驅動。


體系結構:輸入子系統由驅動層,輸入子系統核心層(InputCore)和事件處理層(EventHandler)三部分組成。一個輸入事件,如鼠標移動,鍵盤按鍵按下,通過Driver->InputCore-Eventhandler->userspace的順序到達用戶空間的應用程序。
驅動層:將底層的硬件輸入轉化為統一事件形式,向輸入核心(InputCore)匯報。
輸入核心層:為驅動層提供輸入設備注冊與操作接口,如:input_register_device;通知事件處理層對事件進行處理;在/PROC下產生相應的設備信息。
事件處理層:主要作用是和用戶空間進行交互,我們知道Linux在用戶空間將所有設備當成文件來處理,在一般的驅動程序中都有提供fops接口,以及在/dev下生成相應的設備文件nod,而在輸入子系統中,這些工作都是由事件處理層來完成的。
設備描述:在Linux內核中,input設備用input_dev結構體描述,使用input子系統實現輸入設備驅動的時候,驅動的核心工作是向系統報告按鍵、觸摸屏、鍵盤、鼠標等輸入事件(event,通過input_event結構體來描述),不需要再關心文件操作接口,因為input子系統已經完成了文件操作接口,驅動報告的事件經過InputCore和Eventhandler最終到達用戶空間。






新聞熱點
疑難解答