輸入子系統,顧名思義這自己是大神擼的一個系統。這個系統它不只把輸入設備底層驅動的共性部分(好比註冊設備,open、write等)編寫成一個大集合 以供調用,並且把與底層相匹配的處理事件程序也完成了。因此你只須要用這些集合把相對應的底層驅動設置好後註冊進系統就能夠了,這樣不只省去了不少事並且 保護了內核的統一。linux
首先咱們先設置好相應的驅動(這其中最主要仍是設置input_dev這個結構體和set_bit()等函數),而後註冊。當輸入事件發生時(按下 鼠標、點開顯示屏),內核經過(input_report_...)函數向輸入子系統報告發生的事件(其中這個函數最主要的部分仍是 input_event函數),而後經過輸入子系統匹配到相應的處理事件中去,而經過這個處理事件函數咱們就能夠鏈接到上層的應用中去,這就是大體的過程 了。函數
經過這個過程知道事件驅動一部分,輸入子系統自己一部分和底層驅動三部分組成了輸入子系統。而和上層有關的函數無非就是 open,write.read.close等,和底層有關的無非就是寄存器的操做等。這些在輸入子系統其實一樣適用,不過對輸入子系統這個要更簡單,因 爲在事件處理部分咱們的linux大神已經幫你完成了,你只須要把相應的底層驅動匹配上去就行,因此咱們要作得就是完成底層驅動的部分,可是呢,對底層驅 動大神們怕你擼的仍是不夠規範因此也把一些簡單的接口給你,你只須要直接調用就能夠了。。說是輸入子系統,但我已經把這麼明顯的分離分層思想已經暴露出來 了。咱們把整個系統分層爲上層應用----下層驅動(這就是分層)而後又把下層驅動分離爲事件驅動和設備驅動(這就是分離)。.net
這只是輸入子系統的主要部分,其餘的部分同樣。。code
一個例程:http://www.oschina.net/code/snippet_2241389_52566(只有部分註釋)接口