USB采用樹形拓撲結構,主機側和設備側的USB控制器分別稱為主機控制器((Host Controller)和USB設備控制器(UDC),每條總線上只有壹個主機控制器,負責協調主機和設備間的通信,而設備不能主動向主機發送任何消息。
在Linux系統中,USB驅動可以從兩個角度去觀察,壹個角度是主機側,壹個角度是設備側。從上圖主機側去看,在Linux驅動中,處於USB驅動最底層的是USB主機控制器硬件,在其上運行的是USB主機控制器驅動,在主機控制器上的為USB核心層,再上層為USB設備驅動層(插入主機上的U盤、鼠標、USB轉串口等設備驅動)。因此,在主機側的層次結構中,要實現的USB驅動包括兩類:USB主機控制器驅動和USB設備驅動,前者控制插入其中的USB設備,後者控制USB設備如何與主機通信。Linux內核中的USB核心負責USB驅動管理和協議處理的主要工作。主機控制器驅動和設備驅動之間的USB核心非常重要,其功能包括:通過定義壹些數據結構、宏和功能函數,向上為設備驅動提供編程接口,向下為USB主機控制器驅動提供編程接口;維護整個系統的USB設備信息;完成設備熱插拔控制、總線數據傳輸控制等。