日期:2014-05-16  浏览次数:20590 次

有谁能告诉我USB设备驱动和USB gadget驱动究竟有什么不同么?
书上说这里的USB设备控制器(UDC)驱动指作为其他USB主机控制器外设的USB硬件设备上底层硬件控制器的驱动,该硬件和驱动负责将一个USB设备依附于一个USB主机控制器上。例如,当某运行Linux的手机作为PC的U盘时,手机中的底层USB控制器行驶USB设备控制器的功能,这时候运行在底层的是UDC驱动,当手机要成为U盘,在UDC驱动之上仍然需要另外一个驱动,对于USB大容量存储器为file storage驱动,这一驱动称为gadget驱动。
而从主机侧来看,USB主机控制器驱动控制插入其中的USB设备,USB设备驱动控制控制USB设备如何与主机进行通信。
如果我要写usb扩蓝牙模块驱动,究竟是算USB设备驱动呢还是UDC驱动呢?这里面的概念实在不清楚,有谁能告诉我么?

------解决方案--------------------
一般的总线,驱动分两种:总线控制器的驱动 以及总线上的设备的驱动。这两个驱动都在同一个cpu上运行。设备驱动会调用总线控制驱动提供的方法。卖什么设备就写什么设备的驱动。所以很少有人写总线控制器的驱动,大多是些设备驱动。
usb扩蓝牙模块驱动,如果你的usb控制器是主的话,那就是一个普通的usb设备驱动。跟gadget无关。



usb OTG 允许usb主控制器做从设备,这就是从UDC,再配合从设备这一端的gadget驱动,模拟u盘、摄像头、网卡什么的usb设备。UDC和gadget位于同一个cpu。

下简单示意图的主设备和从设备 ,物理上是独立的,只靠usb连接。主从设备都有自己的cpu。

usb主设备 usb从设备
主设备cpu---UDC驱动+usb设备驱动---------------usb总线--------------gadget驱动+udc驱动---从设备cpu