USB 驱动框架分析

USB 控制器作为 Host (USB 主机控制器)时,使用 USB 主机控制器驱动。 USB 控制器作为 device (USB 设备控制器)的时候驱动框架分别为:Gadget Function 驱动、Gadget Function API、Composite 及 UDC (usb device controller) 驱动。

image. png

  • 上层 Gadget Function 驱动(代表具体设备驱动),比如存储设备:移动硬盘、U 盘设备;通讯设备:USB 串口、USB 虚拟网卡等;UAC 驱动:USB 声卡 USB 音频设备。
  • Gadget function API(抽象层),向上和向下提供统一标准 API 接口。
  • composite(中间层) 支持多种功能的设备(USB 符合设备驱动的开发)。
  • UDC驱动 直接访问硬件,控制 USB 设备与 USB 主机之间的通信。

Gadget Function

Gadget Function 驱动使用 usb_function_driver 数据结构进行描述:

image. png

image. png

image. png

Gadget Function API

上层为 function 驱动使用 function api 注册和注销,下层为 composite 驱动使用 function apifunction 驱动绑定和匹配。function 驱动要实现 usb_function_driver 数据结构并向 function api 层注册。具体的 API 操作如下:

image. png

image. png

image. png

image. png

image.png

UDC

中断处理程序分析

  1. USB 设备控制器使用 struct dwc3_event,这个数据结构用来描述 usb 设备控制器事件。具体内核如下:

image.png

image.png

  1. 事件缓冲区使用数据结构 dwc3_event_buffer 来描述:

image.png