下面学习针对高通平台的HS-USB(HS:high speed高速)堆栈(stack)软件架构设计和源代码布局的细节。
Android HS-USB堆栈基于下面几点:
- Gadget driver framework(gadget驱动架构)支持外设模式(Peripheral mode)
新的gadget驱动架构在android2.0及之后的版本实现。Google刚开始开发一个新的架构叫function framework(只用在android1.6版本)。因为linux内核中的gadget framework不支持复合设备(composite devices)。后来gadget framework添加对了对复合设备的支持,google并对gadget framework做了重大的修改以支持组合开关(composition switch)
- 兼容EHCI主控制器驱动,以支持host模式。
- On-The-Go(OTG驱动)。
- USB stack
Android HS-USB OTG堆栈基于ID引脚检测来支持OTG模式,HS-USB OTG core代表HS-USB控制器。


- OTG driver
- OTG驱动首先被加载,由它建立(set up)host controller driver(HCD主控制器驱动)和device controller driver(DCD设备控制器驱动)的transceive struct(收发器结构),在OTG注册了HCD和DCD后,OTG状态机才生效。
- 根据连接到A/B USB连接器的Micro-A插头(ID引脚接地,启动主模式)或Micro-B插头(ID引脚悬空,启动从模式)来启动对应的控制器驱动(HCD或DCD)。
- 存取HS-USB OTG控制器寄存器来执行USB操作。
- USB(主/从)电源管理。
- USB时钟管理,比如,时钟使能、关闭复位等。
- Device controller driver
- 向下与HS-USB OTG控制器交互
- 执行断电操作,比如使能、关闭、入队、出队、刷新、停止等等。
- 执行USB gadget操作,比如VBUS处理、VBUS pull up、远程唤醒等等。
- 充电检测。
- Gadget framework
- USB设备模式驱动框架(device mode driver)
- 支持多配制、多接口、符合设备和alternate接口设置,发展的可重用/组合的usb_function(一个描述配置功能的结构体)实例,提供复合和多配置gadget的更简单设置。
- 此框架驱动底层实现与硬件无关的USB功能(使用设备控制器驱动的调用),例如,在gadget.h中定义了对象和方法。
- 对于特定控制器,支持端点在编译时可配置。
- 在linux中,大多数gadget驱动(例如串口gadget驱动)有一个连接到linux驱动或框架的上界(upper boundary)
对应usb\gadget下android.c、composite.c。

u_serial.c - utilities for USB gadget "serial port"/TTY support,u_serial.c的u表示utilities(工具)。
f_serial.c - generic USB serial function driver,f_serial.c的f表示function。
- Function drivers
Function驱动包括modem(比如USB 接口的4G网卡),NMEA(美国国家海洋电子协议,比如USB接口的GPS),大容量存储等。
对应usb\gadget\function源码。
- Host controller driver(Host控制器驱动)
- 驱动底层部分和HS-USB OTG控制器交互。
- 兼容EHCI
- 使用USB HCD框架注册Host控制器驱动和使用EHCI包装器函数(wrapper函数)来支持root hub、管理I/O请求与关联设备资源、管理底层事务(URB to transfer descriptor queue,例如USB请求块(Universal Request Block)来传递描述符队列)
对应usb\host代码。
- USB core
- USB core的实现与底层硬件无关。
- 对类驱动(class driver)隐藏大多数USB协议相关项。
- 与USB类驱动的交互。
对应usb\core代码。
- USB PHY driver(物理层协议)
- 分离PHY具体操作的新层。
- HCD/DCD/OTG层可以引用多个PHY实例。
对应kernel\msm-3.18\drivers\usb\phy文件夹的源代码。USB PHY driver应该在OTG driver和OTG core之间,第1张图我有备注,下面这种图可以体现出来

- Class drivers类驱动
类驱动包括大容量存储、HID、HUB等。对应\kernel\msm-3.18\drivers\usb\class下代码。
本文详细解析了高通平台HS-USB堆栈的软件架构设计和源代码布局,涵盖Gadget驱动框架、OTG驱动、设备控制器驱动、Host控制器驱动、USB核心、物理层协议和类驱动等内容,深入探讨了各组件的功能和交互。
3766

被折叠的 条评论
为什么被折叠?



