作者:Bright-Ho 聯繫方式:[email protected] 前言背景描述: 雖然在網上看了很多有關輸入子系統的資料和視頻,但是真正的,系統的,全面的,來弄清輸入子系統,還是要花些時間和精力的!現在我以一個初學者的角度來分析input輸入子系統; 那麼分析input輸入子系統之前,得先弄清楚 ...
作者:Bright-Ho
聯繫方式:[email protected]
前言背景描述:
雖然在網上看了很多有關輸入子系統的資料和視頻,但是真正的,系統的,全面的,來弄清輸入子系統,還是要花些時間和精力的!現在我以一個初學者的角度來分析input輸入子系統;那麼分析input輸入子系統之前,得先弄清楚幾個問題;
(1)什麼是字元設備?
答:提供連續的數據流,應用程式可以順序讀取,通常不支持隨機存取。相反,此類設備支持按位元組/字元來讀寫數據。舉例來說,鍵盤、串口、數據機都是典型的字元設備;
我們知道linux中一切設備皆文件;在dev/目錄下的文件中,通過ls -ll命令可以查看文件屬性,以c開頭的都是字元設備文件;
(2)什麼是input輸入子系統?
答:那麼什麼是input輸入子系統呢,內核是操作系統的核心。Linux內核提供很多基本功能,如虛擬記憶體,多任務,共用庫,共用寫時拷貝,以及網路功能等,增加各種不同的功能導致內核代碼不斷的增加;Linux內核把不同功能分成不同的子系統的方法,通過一種整體的結構把各種功能集合在一起,提高了工作效率。同時還提供動態載入模塊的方式,為動態修改內核功能提供了靈活性。
(3)引入input輸入子系統的作用?
答:linux內核中自帶了很多的驅動子系統,其中比較典型的就有:input子系統,led子系統,framebuffer子系統(LCD),I2C子系統,USB子系統,等等;這些子系統通過一層一層的函數傳遞與封裝,實現設備驅動的註冊,以及file_operation結構體裡面的函數操作等;不需要在單獨的設備驅動代碼裡面進行註冊,定義;比如構造file_operation結構體,以及通過register_chrdev來註冊,還包括提供給應用程式的介面;直接調用相應的input子系統的核心層提供的介面,即可操作,input子系統幫你完成這些事情;這樣引入子系統的最終目的就是簡化了驅動程式的實現,子系統把通用的部分都給你實現好了,差異化的東西還得自己來實現;所謂差異化,就是各種不同的硬體設備有自己特有的屬性;
所以寫驅動的時候,你必須瞭解兩點:
(一)瞭解硬體的工作原理,比如硬體的電路圖,硬體的協議,時序圖等等;
(二)瞭解驅動的框架;這裡的框架就是所謂的各種子系統框架;
掌握這兩點後,你就可以明白,通過驅動的框架,知道哪些事情是內核幫我們完成的,哪些事情是需要我們自己來實現的,這在做驅動移植方面的工作,也是必須瞭解的兩點;
那麼這裡暫時提出這3個問題,通過上面的三個問題,可以瞭解到,理解input輸入子系統,必須結合相關的字元設備硬體來瞭解,比如,鍵盤,滑鼠,按鍵,觸摸屏,LCD屏;那麼後面的內容我會結合各種硬體來講解輸入子系統;