中午跟比較要好的同事一塊吃飯,同事剛從單片機開發轉Linux開發沒多久,目前負責給客戶開發一個USB 設備驅動。他跟我抱怨,由于獲取不到客戶內核代碼,因此每次客戶那邊內核代碼發生了改變,自己的驅動程序也要跟著重新編譯,太麻煩了。因此,我建議同事把驅動寫到APP里面。同事大驚,Linux能在應用層開發驅動?
答案是肯定的。在Linux系統中,對于總線類驅動(usb,i2c,spi等),驅動框架都分為倆部分。一是總線控制器驅動,它負責使能總線傳輸數據的能力。二是設備驅動,它負責使能掛在總線上的設備。
以usb設備為例,usb host controller驅動使得Linux可以在自己及掛在自己身上的usb 設備(如usb轉串口設備、usb攝像頭等)之間傳輸數據。但是usb設備種類有千千萬。驅動這些設備,都需要通過usb總線發送特定的數據給到usb設備。比如,我要初始化usb 串口設備,我應該發什么數據設置它的波特率呢?
相信大家已經明白了,總線控制器驅動及總線設備驅動的關系了,其實就是程序分層的思想。總線控制器驅動有了之后,程序員就可以調用她的接口,將自己要發送的數據發送到總線上的設備,這就是設備驅動了。那具體在內核空間調用還是在應用空間調用都是OK的。
筆者在實際工作過程中,有過在應用空間開發i2c設備驅動,安卓APP開發usb 設備驅動(usb轉串口)程序的經驗。
責任編輯 LK
-
控制器
+關注
關注
112文章
16445瀏覽量
179447 -
usb
+關注
關注
60文章
7980瀏覽量
266079 -
Linux
+關注
關注
87文章
11345瀏覽量
210389
發布評論請先 登錄
相關推薦
評論