【转】Linux那些事儿 之 戏说USB(9)我是谁

来源:互联网 发布:怎么写正则表达式的js 编辑:程序博客网 时间:2024/05/01 01:38
我是谁?尼采一遍一遍的问着自己当了哲学家。
我是谁?很多人一遍一遍的问着自己做了精神病人。
我 是谁?USB也一遍一遍问着自己,当然它不会真的是一颗树,它也不会是太阳,Linux里没有太阳,真要有的话也只能是Linus。USB只是Linux 庞大家族里的一个小部落,host controller是它们的族长,族里的每个USB设备都需要被系统识别,被我们识别。虽然清朝老爷子们不知道闭关锁国没前途,可USB是知道的, sysfs就是它对外的窗口,我们可以从sysfs里了解认识每一个USB设备。
生活是简单的,USB是复杂的。USB设备在sysfs中的表示并不是那么明了,它不叫张三也不叫李四,因为它姓USB,不过我们可以使用tree命令查看一下

这是遵照花小钱做大事的原则从ldd3里拿出来的,懒得再去查了,毕竟结果都差不多。上面显示的是包含一个USB接口的USB鼠标导出的结果。目录树里的

/sys/devices/pci0000:00/0000:00:09.0/usb2/2-1

表示的是鼠标,下层目录

      /sys/devices/pci0000:00/0000:00:09.0/usb2/2-1/2-1:1.0

表示了鼠标的USB接口。Sysfs里的usb设 备都是类似的表示,设备的目录下包括了表示设备接口的目录。目录里的各个文件表示的设备或接口的描述,大都对应了设备描述符、接口描述符等的相应值,可以 通过这些值获得感兴趣的信息。新名词就像任小强的理论一样层出不穷,什么是设备描述符还有接口描述符?不过我们这里要暂时忽略它的存在,先关心关心USB设备在sysfs里是如何命名的,弄清它是谁,也就是说上面路径的含义。

USB系统中的第一个USB设备是root hub,前面已经说了它是和host controller绑定在一起的。这个root hub通常包含在PCI设备中,是连接PCI总线和USB总线的bridge,控制着连接到其上的整个USB总线。所有的root hub,内核的usb core都分配有独特的编号,上面贴出来的例子里,就是usb2,因为它注册在第二个hub

USB总线上的每个设备都以root hub的编号作为其名字的第一个号码。这个号码后跟着一个“-”字符还有设备所插入的端口号。因此,上面例子中的USB鼠标的设备名就是2-1。因为该USB鼠标具有一个接口,导致了另外一个USB设备被添加到sysfs路径中。因为物理USB设备和单独的USB接口在sysfs中都将表示为单独的设备。USB接口的命名是设备名直到该接口,上面就是2-1后面跟一个“:”和USB配置(Configuration)的编号,然后是一个“.”和该接口的编号。因此上面的鼠标USB接口就是2-1:1.0,表示使用第一个配置,接口编号为0

不过,sysfs并没有展示USB设备的所有部分,设备可能包含的可选配置都没有显示,不过这些可以通过usbfs找到,该文件系统被挂在到/proc/bus/usb目录,从/proc/bus/usb/device文件可以直到系统中存在的所有USB设备的可选配置。

这里说到了USB设备的配置,有必要先说一下,还是花小钱做大事,直接拿复旦人甲兄弟的描述了。一个设备可以有一种或者几种配置,这能理解吧?没见过具体的usb设备?那么好,手机见过吧,每个手机都会有多种配置,或者说“设定”,比如,我的这款,Nokia6300,手机语言,可以设定为English,繁体中文,简体中文,一旦选择了其中一种,那么手机里边所显示的所有的信息都是该种语言/字体。还有最简单的例子,操作模式也有好几种,标准,无声,会议,etc。基本上如果我设为“会议”,那么就是只振动不发声,要是设为无声,那么就啥动静也不会有,只能凭感觉了,以前去公司面试的话通常就是设为无声,因为觉得振动也不好,让人家面试官听到了还是不合适。那么usb设备的配置也是如此,不同的usb设备当然有不同的配置了,或者说需要配置哪些东西也会不一样。好了,关于配置,就说这么多,更多的我们暂时也不需要了解了。

 
原创粉丝点击