Android USB驱动源码说明

发布于:2025-03-15 ⋅ 阅读:(21) ⋅ 点赞:(0)

Android USB驱动源码一般在kernel\msm-4.19\drivers\usb目录下。

为了理解所有的Linux-USB框架,需要用到下面的资源 :      

(1)USB驱动代码。         

(2)USB2.0规范(网址www.usb.org),和一些补偿性的文档,比如关于USB OTG和不同设备类。         

(3)USB控制器的芯片规范。比如包括主控制器(PC、服务器等等上的),外围控制器(在带有Linux固件的设备中,像打印机或手机),以及像以太网适配器这样的硬件外围设备。

(4)USB外围功能对应的其他协议规范,一些是厂家特定的。         

(5)host/device

可以参考kernel\msm-4.19\drivers\usb\README对这些部分的介绍,列举了usb目录各个文件的作用。Makefile定义了根据该子目录下的源码文件构建目标文件的规则。

USB驱动源代码的子目录说明

(1)Core

USB host的核心代码,包括usbfs(USB文件系统)文件和HUB类驱动(hub_wq)。对应配置项CONFIG_USB,源代码文件如下:

配置了CONFIG_USB表示支持USB主机端(host side)。

(2)Host

USB主控制器驱动,包括UHCI、OHCI、EHCI、XHCI和其他可能专门用于嵌入式系统的部分。由CONFIG_USB_XXXX_HCD选项决定。

如下所示:

表示USB主设备支持USB2.0。           

OHCI:Open Host Controller Interface。

U:Universal    

E:Enhanced   

X:eXtensible

CONFIG_USB_XXX_MSM选项,启动平台芯片集中USB主控制器的支持。Root HUB内置TT(Transaction Translator事务翻译),此驱动依赖于OTG驱动来进行PHY初始化、时钟管理、为VBUS供电和电源管理。         

(3)Phy            //physical           

 由usb目录下Makefile中CONFIG_USB_SUPPORT选项指定,此选项添加了对USB的核心支持。 (4)Gadget(小配件,小工具)             

USB外围控制器驱动。             

USB是一个主/从协议,作为host(比如PC)可以控制多达127个从设备,USB硬件是非对称,这便于设置,不能将连接到“host端”的连接器连接到设备端。    

Linux可运行在host或设备端,这两种情况下都需要一个底层总线控制器驱动。

下面是单个USB驱动目录,一个新的驱动应该增加到下面目录下的第1级子目录下。         

(5)Image/:静态图像驱动,如扫描仪或数字摄像头。         

(6)../input/:任何使用输入子系统的驱动,如键盘、鼠标、触摸屏。         

(7)../media/:多媒体驱动,如摄像头、音频和任何其他和V4I子系统交互的其他驱动。

(8)../net/:网络驱动。

(9)Serial/:USB转串口驱动:由usb目录下Makefile中CONFIG_USB_SERIAL决定。