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

图里主要显示了四个层次,USB物理设备(USB Physical Device)、客户软件(Client SW)、USB系统软件(USB System SW)以及USB Host Controller。Host 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的历史发展体系结构等比较基本的东东,也就是协议的前几章,更多的东东还是下面和代码一块说吧。为了纪念这个历史性的时刻,学学电影里的酷哥警察说句:好戏开始了。

不要忘本,任何时候,任何事情。

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

相关文章:

你感兴趣的文章:

标签云: