前言
接下來我們看一下Linux下USB驅動的架構,因為內容較多,會分成多篇來介紹!
USB整體框架
USB驅動分為主機側和設備側,主機側和設備側的USB控制器分別稱為主機控制器(Host Controller)和USB設備控制器(UDC)。USB核心層向上下提供編程接口,維護整個系統的USB信息,完成熱插拔控制,數據傳輸控制。
主機側
從上圖看,我們需要實現兩個驅動,USB主機控制器驅動和USB設備驅動。
USB主機控制器驅動:控制插入的USB設備
USB設備驅動:控制具體USB設備和主機如何通信
設備側
設備側也需要實現兩部分驅動,UDC驅動和Gadget Function驅動。
UDC驅動:控制USB設備和主機的通信
Gadget Function驅動:控制USB設備功能的實現
* 為什么叫“Gadget驅動”,是為了不和USB設備驅動混淆,所以改為“器件驅動”
重要結構體
之前在基礎知識中,我們介紹過設備,配置,接口,端點等概念,它在Linux中有4個對應的結構體來表示。同時也有對應的結構體來描述USB設備。
內核版本:4.20.12
usb_device_descriptor -- 設備描述符
usb_config_descriptor -- 配置描述符
usb_interface_descriptor -- 接口描述符
usb_endpoint_descriptor -- 端點描述符
bmAttributes : Bit1-0:00控制,01同步,02批量,03中斷。
usb_string_descriptor -- 字符串描述符
字符描述符是可選的,如果一個設備不支持字符串描述符,設備描述符、配置描述符和接口描述符中對字符串描述符的引用必須設置為0。
usb_device -- usb設備
它描述了一個USB設備, 里面包含了設備描述符,配置,端點等信息。
為了更清晰的了解設備,配置,接口,端點等結構體信息,我在Ubuntu上插入一個U盤,然后使用lsusb -v去查看該usb設備的設備描述符等信息。
它展示了一個設備的描述符信息,各個參數和上面的結構體都可以一一對上,它也描述了一個設備各種信息。
總結
后面會根據上面驅動框架分成USB主機控制器驅動,USB設備驅動,UDC驅動,Gadget Function驅動等4個部分來介紹對應的內容。
審核編輯:劉清
評論
查看更多