Android usb 流程分析
文档以 UMS(usb mass storage)为例 来分析流程,主要按照图中红线来分析(即从插入
USB 开始到状态栏弹框,然后又从选择 UMS 功能开始往下的流程) 。 以前没有看过 USB相
关代码,网上也很少有分析 usb FRAMEWORK相关的东西,文档中可能存在错误,如果发现
欢迎指正。
总体框图
1. Kernel USB 流程
LINUX KERNEL GADGET 架构
Linux USB Gadget分三层架构,层次关系从上到下
一层: USB Gadget 功能层。 BSP/Driver 开发者通常是要实现这一层,从而实现一个具体
的设备驱动,如 Anddroid 在此层实现了 adb, mtp, mass_storage 等。浏览参考关注此
层 代 码 时 , 会 发 现 “composite ”是 此 层 的 关 键 字 , 此 层 中 关 键 的 数 据 结 构 是 :
struct usb_composite_driver 。这一层的驱动文件一般为: driver/usb/gadget/android.c
(android 实现的)或 driver/usb/gadget/serial.c (传统 Linux 实现的 USB转串口)。
二层: USB设备层( usb core)。这一层是 Linux 内核开发维护者实现的,与我们没太大
关系,不用我们操心,我们只关心其的一些接口就行。浏览参考关注此层时,会发现
“ gadget ”是此层的关键字, 此层的关键数据结构是: usb_gadget_driver,usb_composite_dev 。
这层主要的一个驱动文件为: driver/usb/gadget/composite.c
三层: USB设备控制器驱动层。这一层主要是与 CPU、 CPU USB控制器有关,与硬件紧
密相关,主要它和 USB 控制器牵扯在一起,涉及有寄存器、时钟、 DMA 等等。但是这
一层往往是由芯片厂商去实现。 我们一般仅需在板级文件中处理好所需要的 USB接口即