USB基础---Linux USB驱动层次
在Linux系統中,提供主機側和設備側視角的USB驅動框架,從主機側看到的USB主機控制器和設備驅動,以及從設備側看到的設備控制器和Gadget驅動。
圖1
(1)?? Mass storage
USB Mass Storage Device ,USB大容量設備,比如我們的移動硬盤,或者是我們手機連接PC時作為一個大容量設備。
(2)?? CDC
CDC(Communication Device Class)類是USB2.0標準下的一個子類,定義了通信相關設備的抽象集合。它與USB2.0標準以及其下的子類的相互關系如下圖所示:
圖2
(3)?? HID
人機接口設備Human Interface Device的縮寫,由其名稱可以了解HID設備是直接與人交互的設備,例如鍵盤、鼠標與游戲桿等。不過HID設備并不一定要有人機接口,只要符合HID類別規范的設備都是HID設備。
(4)?? UDC(USB device controller)
圖3
?
2.1?? 主機側
從主機側的角度看,需要編寫的USB驅動包括USB主機控制器驅動和USB設備驅動兩類,USB主機控制器驅動程序控制插入其中的USB設備,而USB設備驅動程序控制該設備如何作為從設備與主機通信,比如圖3右邊,Android設備作為主機,USB主機控制器驅動程序控制插入其中的USB鍵盤,而USB設備驅動此時對應HID(包括USB鍵盤)的驅動。
每條總線上只有一個主機控制器,負責協調主機和設備間的通信,而設備不能主動向主機發生任何消息。
USB核心負責USB驅動管理和協議處理的主要工作。其功能包括:通過定義一些數據結構、宏、功能函數,向上為設備驅動提供編程接口,向下為USB主機控制器驅動提供編程接口;維護整個系統的USB設備信息;完成設備熱拔插控制、總線數據傳輸控制等。
2.2?? 設備側
Linux內核的USB設備側驅動程序分為3個層次:UDC驅動程序、Gadget(小配件) Function API和Gadget Function驅動 。
UDC驅動程序直接訪問硬件,控制USB設備和主機間的底層通信,向上層提供與硬件相關操作的回調函數。Gadget Function API是UDC驅動程序回調函數的簡單封裝。Gadget Function驅動具體控制USB設備功能的實現,使設備表現為“網絡鏈接”、“打印機”或“USB Mass Storage”等特性,它使用Gadget Function API控制UDC實現這些功能。Gadget Function API把下層的UDC驅動和上層到Gadget Function驅動隔離開,是的在linux系統中編寫USB設備側驅動時能夠把功能的實現和底層通信分離。
?
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的USB基础---Linux USB驱动层次的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 情商(实践版本,丹尼尔.戈尔曼)---阅
- 下一篇: android/WINCE驱动、系统(f