07.06.2013 Views

Scsi - Index of

Scsi - Index of

Scsi - Index of

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

只<br />

是一个usb 接口.这些口实际上就是所谓的hub 口.而现实中经常是让一个usb 控制器和一个<br />

hub 绑定在一起,专业一点说叫集成,而这个hub 也被称作root hub,换言之,和usb 控制器绑<br />

定<br />

在一起的hub就是系统中最根本的hub,其它的hub可以连接到她这里,然后可以延伸出去,外接<br />

别的设备,当然也可以不用别的hub,让usb 设备直接接到root hub 上.hub 干嘛用的我们知道<br />

了,那么usb host controller 本身是干什么用的呢?controller,控制器,顾名思义,用于控制,控<br />

制什么,控制所有的usb 设备的通信.通常计算机的cpu 并不是直接和usb 设备打交道,而是和<br />

控<br />

制器打交道,他要对设备做什么,他会告诉控制器,而不是直接把指令发给设备,然后控制器再去负<br />

责处理这件事情,他会去指挥设备执行命令,而cpu 就不用管剩下的事情,他还是该干嘛干嘛去,<br />

控制器替他去完成剩下的事情,事情办完了再通知cpu.否则让cpu 去盯着每一个设备做每一件<br />

事情,那是不现实的,那就好比让一个学院的院长去盯着我们每一个本科生上课,去管理我们的出<br />

勤,只能说,不现实.所以我们就被分成了几个系,通常院长有什么指示直接跟各系领导说就可以<br />

了,<br />

如果他要和三个系主任说事情,他即使不把三个人都召集起来开个会,也可以给三个人各打一个<br />

电话,打完电话他就忙他自己的事情去了,比如去和他带的女硕士风花雪月.而三个系主任就会去<br />

安排下面的人去执行具体的任务,完了之后他们就会像院长汇报.<br />

所以,Linux 内核开发者们,专门写了一些代码,并美其名曰usb core.时代总在发展,当年胖杨贵<br />

妃照样迷死唐明皇,而如今人们欣赏的则是林志玲这样的魔鬼身材.同样,早期的Linux 内核,其<br />

结<br />

构并不是如今天这般有层次感,远不像今天这般错落有致,那时候drivers/usb/这个目录下边放<br />

了很多很多文件,usb core 与其他各种设备的驱动程序的代码都堆砌在这里,后来,怎奈世间万<br />

千<br />

的变幻,总爱把有情的人分两端.于是在drivers/usb/目录下面出来了一个core 目录,就专门放<br />

11<br />

一些核心的代码,比如初始化整个usb 系统,初始化root hub,初始化host controller 的代码,<br />

再后来甚至把host controller 相关的代码也单独建了一个目录,叫host 目录,这是因为usb<br />

host controller 随着时代的发展,也开始有了好几种,不再像刚开始那样只有一种,所以呢,设计<br />

者们把一些host controller 公共的代码仍然留在core 目录下,而一些各host controller 单独<br />

的代码则移到host 目录下面让负责各种host controller 的人去维护,常见的host controller<br />

有三种,分别叫做EHCI,UHCI,OHCI,所以这样,出来了三个概念,usb core,usb host,usb<br />

device,即原本是一家人,却被活生生的分成了两岸三地...的确,现实总是很无奈,然而,心若知道<br />

灵犀的方向,哪怕不能够朝夕相伴?没错,usb 通信的灵魂就是usb 协议. usb 协议将是所有usb<br />

设备和usb 主机所必须遵循的游戏规则.这种规则也很自然的体现在了代码中.于是,我们需要了<br />

解的不仅仅是drivers/usb/storage/目录下面的冬冬,还得去了解那外面的世界,虽然,只需要<br />

了解一点点.<br />

未曾开始却似结束<br />

还是回到那个初始化函数吧,usb_stor_init,看了它的代码每一个人的心中都有一种莫名的兴<br />

奋,<br />

因为它太短了,就那么几行,除了两个printk 语句以外,就是一个函数的调用,usb_register.<br />

printk 不用我说,每一个有志青年都该知道,就算没见过printk 也该见过printf 吧,否则的话,

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!