`
dato0123
  • 浏览: 911198 次
文章分类
社区版块
存档分类
最新评论

Linux那些事儿 之 戏说USB(8)最终奥义

 
阅读更多
奥义是什么?看过圣斗士不?人是人他妈生的,妖是妖他妈生的,大家都是讨口饭吃,不用这么耍我吧。
那么打败圣斗士的最终奥义是什么?因为对圣斗士用过的招式第二次就不管用了,所以,你必须练9999999……种拳法,让星矢们搞不清哪个才是你的绝招。如果全部用完了,他们还没有死的话,千万不要慌张,请重复一次。因为那条定律已经被破解了。谁还记得你打过什么招式啊??
这么强的话不是我说的,我也不是教大家怎么打败圣斗士,我是他们忠实的fans,爱护还来不及。
前面说了USB是一棵树,不过树也是有生命的,也是有内心世界的,我们不能只看到它枝枝丫丫的表面,需要从更深层次的去关怀它。我们每个人不也都希望能够有那么一个人真正的理解自己的内心么?
那么USB的内心世界是什么,我们都需要理解些什么,这就是上面所说的最终的奥义么?其实,是称不上最终的,只是会换个角度冷静的剖析一番而已,因为我们每个人都不可能完全的了解另外一个人的内心世界,虽然有时你可能以为自己已经做到了,但实际上,最终还是会发现,这还差的很远,现实都是残酷的,不是么。
<stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><lock aspectratio="t" v:ext="edit"></lock>
<shape id="_x0000_s1026" style="MARGIN-TOP: 70.05pt; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: 136.5pt; WIDTH: 314.25pt; POSITION: absolute; HEIGHT: 236.25pt; TEXT-ALIGN: left" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/baihehua/LOCALS~1/Temp/msohtml1/01/clip_image001.emz"></imagedata><wrap type="square" side="right"></wrap></shape>

一个完整的USB系统应该实现上面图里的各个部分,USB协议如是说。自从人类社会出现了阶级,我们的生活就再也离不开各种各样的层次了。孔子说,读史使人显得更明智,分层使人看的更明晰。ZF、任小强们、中介们、我们,多完美的层次,如果没有了层次,谁又能透彻的明白之间都是什么关系啊。所以,我们应该感谢有了阶级,感谢有了层次,能够让去更好的理解这些技术,更好的混口饭吃,拿更多的money去买房子,让更多的任小强们先富起来……。

图里主要显示了四个层次,USB物理设备(USB Physical Device)、客户软件(Client SW)、USB系统软件(USB System SW)以及USB Host ControllerHost Controller已经说过了,系统软件就是操作系统里用来支持USB的部分,像咱们的usb core,还有各种设备驱动等等,客户软件么,就是上层应用了,只有设备和驱动程序,我们仍然什么都做不了,现实生活中一个很浅显的道理就是只靠摄像头和驱动是不可能和mm视频的,不是么,这是个应用为王的时代。

真的是这样么?多少年以前,作为一个普通人,我会坚定的说是。只是现在,作为一个读了协议的普通人,我要说并不完全是这样。上面的系统软件,只表示了系统里支持USB的部分,也就是系统相关设备无关的部分,相对于咱们的linux来说,就是usb core,并不包括所谓的各种设备驱动。而客户软件则指设备相关,也就是对应于特定设备的部分,你的USB键盘驱动、触摸屏驱动什么的都在这儿。这里的名字太迷惑人了,一直觉得写驱动是系统级的编程,原来搞协议的这些同志觉得不是这么回事,我羞愧的低下了无知的脑袋。

为什么会对这几个概念这么较真儿那,不是因为它们有多可爱,只是它们在协议里无处不在。主机这边就分这三层,Host Controller看似在最低层,却掌控着整个USB的通信,你的USB设备要想发挥作用,首先得获得它的批准,此路是它开,要想从此过,留下买路财。我们也在最底层,不同的是被掌握,不同的角色决定了不同的命运。

USB物理设备这边看着好像也分了三层,其实我们可以把它们看成一样的东东,只是为了对应了主机这边的不同层次,Host Controller看到的是一个个hub还有hub上的USB device,而在系统软件的眼里没那么多道道儿,hub还有各种设备什么的都是一个个的逻辑设备,客户软件看到的是设备提供的功能。接下来还会有说到。站在不同的高度看到不同的风景,不然为什么买房子时高一层要加多少钱那。

已经被计算机网络中的七层协议洗过脑的我们应该很容易的就看出,真实的数据流只发生在Host Controller和设备的Bus Interface之间,其它的都是逻辑上的,也就说是虚的,如果谁对我们说什么什么是逻辑上存在的,那它肯定就是虚的,比如说任小强逻辑上给你了一套北京的房子,你相信么,给是给,得掏钱,而且还得掏的多。

各种USB设备提供的功能是不同的,但是面向主机的Bus Interface却是一致的,主机也不是神仙,掐指一算就可以知道哪个是哪个,所以,那些设备本身还必须要提供用来确认自己身份的信息,这些信息里有些是共有的,有些是个别设备特有的,我们都是光荣的中国公民,但是有的人是盖房子,有的人买房子。

各种设备和主机是怎么连接在一起的那?前面的那颗树已经描绘的比较形象了,不过那棵树里的compound device被有意的飘过了。那么,刀是什么样的刀,剑是什么样的剑,compound 设备又是什么样的设备?其实,在USB的世界里,不仅仅有compound device,还有composite device,简单的中文名字已经无法形象的表达它们的区别,就还是使用它们的英文原名了。compound device是那些将hub和连在hub上的设备封装在一起所组成的设备,而composite device是包含彼此独立的多个接口的设备。从主机的角度看,一个compound device和单独的一个hub然后连接了多个USB设备是一样的,它里面包含的hub和各个设备都会有自己独立的地址,而一个composite device里不管具有多少接口,它都只有一个地址。

上面都是站在host controller的层次上,说的是实实在在的物理拓扑,对于系统软件来说,没有这么复杂,所有的hub和设备都是一个个的逻辑设备。站的越高,看的越远,快乐如此简单,可以做售楼广告了。

一个USB逻辑设备就是一系列端点(endpoint)的集合,它与主机之间的通信发生在主机上的一个缓冲区和设备上的一个端点之间,通过管道来传输数据。意思就是管道的一端是主机上的一个缓冲区,一端是设备上的端点。

图里的Interface是怎么回事?这里先简单说说吧,反正代码里会不停的遇到再遇到。USB端点被捆绑为接口(Interface),一个接口代表一个基本功能。有的设备具有多个接口,像USB扬声器就包括一个键盘接口和一个音频流接口。在内核里一个接口要对应一个驱动程序,USB扬声器在linux里就需要两个不同的驱动程序。到目前为止,可以这么说,一个设备可以包括多个接口,一个接口可以没有或具有一个以上的端点,当然以后我们会发现并不仅仅止于此。不过先说这么多吧,省得说得慷慨激昂,看的昏昏欲睡。

现在已经说了USB的历史发展体系结构等比较基本的东东,也就是协议的前几章,更多的东东还是下面和代码一块说吧。为了纪念这个历史性的时刻,学学电影里的酷哥警察说句:好戏开始了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics