关于usb架构
简单对usb架构的部分内容进行记录。内容杂乱,有待整理。
以一个内核版本的内容来简要说明下usb结构中相关的内容:
#ls linux-2.6.32/drivers/usb
atm class early host Kconfig misc musb README storage wusbcore
c67x00 core gadget image Makefile mon otg serial usb-skeleton.c
这里,有几个关键的目录:
core
host
gadget
class
...
core这个目录存放一些核心的代码,比如初始化整个usb系统,初始化root hub,初始化host controller的代码等等,随着时间的发
展,这个目录以及usb父目录的其他内容,会被存放到不同的更为合适的地方。
host目录存放主机host controller驱动相关内容。所谓host controller就是控制usb设备的硬件,而主机的各个usb设备,又有它们
自己的驱动。host目录下的内容,例如:ehci-pci.c用于该host controller是在基于ehci的pci上面的usb hostcontroller,其它的类似,还有基于某个cpu的usb host controller。反正,就是看成把硬件host controller挂接到它所基于的那个上面,然后又通过>这个host controller来控制其上的usb设备。
class这个目录存放关于某个类的usb设备信息,例如通信类,等等。
gadget这个目录信息比较多。假设我们将一个本身运行linux系统的嵌入式板子插入到pc上面,通过pc访问插入到这个板子上面的某>个usb设备(例如sd卡)。那么,首先pc的host controller将这个板子识别成为某种类型的设备,所以相关驱动代码大致在pc端的内
核的与host目录同级的其它驱动目录上(例如storage对应的是海量存储类)。其次,插入到板子上面的usb设备(例如sd卡)被这个
板子的host controller识别成usb设备(对应的驱动大致在板子端的内核的与host目录同级的其它驱动目录上(例如storage对应的是海量存储类)。然后,板子上又告诉它自己它被当做pc的usb设备来使用(对应的驱动大致在板子端的内核的gadget中的**udc驱动或者类似文件中的代码部分,)。然后板子又根据插入到板子上面的usb设备,让pc能够将这个板子识别成可以访问板子上面usb设备的设>备(对应的驱动大致在板子端的内核的gadget中的其它gadget的文件中的代码部分)。描述的并不是特别精确,但是这是大致的框架结构。总之上面的那种情况,需要的驱动代码分别在pc和板子,对于pc上面,我们一般不会关心,主要是板子上面,三个地方比较关
键:a)将板子可以做为usb设备的部分(gadget目录中的udc驱动部分) b)将板子识别成什么设备类型的部分(例如板子插入sd卡那么pc将板子识别成sd卡,插入到板子上的usb设备驱动和pc联接得通过它)c)插入板子上的usb设备的驱动部分(以便板子识别它自己身>上的usb设备,就像pc识别板子一样为usb设备一样)。注意,这里板子和pc运行的两套系统。
其他目录:就存放host controller所控制的各种usb设备驱动类。例如storage存放的就是海量存储类(u盘)设备的驱动等等。
另外,并不是所有的usb设备驱动都在这个drivers/usb目录下面,其它地方也有,例如"linux-2.6.32/sound/usb"。
阅读(1995) | 评论(2) | 转发(1) |