Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5508148
  • 博文数量: 922
  • 博客积分: 19333
  • 博客等级: 上将
  • 技术积分: 11226
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 14:33
文章分类

全部博文(922)

文章存档

2023年(1)

2020年(2)

2019年(1)

2017年(1)

2016年(3)

2015年(10)

2014年(17)

2013年(49)

2012年(291)

2011年(266)

2010年(95)

2009年(54)

2008年(132)

分类: LINUX

2012-01-30 16:23:10

关于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"。
阅读(1916) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

vaqeteart2019-12-18 11:27:34

to org drafts.

vaqeteart2019-11-22 21:22:25

转至wiz