深入,并且广泛
-沉默犀牛
USB设备驱动分类
USB驱动程序可以粗分为两类:
一、主机(Host)系统上的驱动程序 ,这个驱动程序控制插入其中的USB设备
二、设备(Device)上的驱动程序,这个驱动程序控制USB设备如何与主机通信
为了举一个形象的例子,我得先展示一张图片,更细致的介绍一下以上的两种分类:
Host | Device |
---|---|
USB设备驱动(Mass storage/CDC/HID) | Gadget Function 驱动(serial…) |
USB核心 | Gadet Funtion API |
USB Host Controller 驱动(OHCI/EHCI/UHCI) | UDC驱动(omap/pxa2xx…) |
USB Host Controller | UDC |
在这个图中,主机侧与设备侧又分别分为了两个驱动:
Host:USB设备驱动、USB Host Controller 驱动
Device:Gadget Function 驱动、UDC驱动
USB设备驱动和USB Host Controller驱动之间的USB core负责了USB驱动管理和协议处理的主要工作。
1.它通过定义一些数据结构体、宏和功能函数,向上为设备驱动提供编程接口,向下为USB Host Controller驱 动提供编程接口;
2.维护整个系统的USB设备信息;
3.完成设备热拔插控制、总线数据传输控制等Gadet Function API现在是UDC驱动程序回调函数的包装
举一个生活中的例子:当用Android系统的手机 通过USB线 连接Linux系统的PC
Host(PC)的动作:
1.如果你插入了USB2.0的设备,则Host的USB Host Controller 驱动要使能EHCI,如果是USB1.1的设备,就要使能OHCI
/UHCI,不过一般做法是全都使能。在这里我们手机插入后,Host Controller 驱动会启用EHCI。
2.这个USB设备驱动,会根据插入的设备不同,而选择不同的驱动。默认已经有的驱动有存储设备、键盘、鼠标、游戏
杆、网络设备和调制解调器。如果是其他的设备