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

原创 2007年09月18日 15:36:00
我是谁?尼采一遍一遍的问着自己当了哲学家。
我是谁?很多人一遍一遍的问着自己做了精神病人。
我是谁?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设备当然有不同的配置了,或者说需要配置哪些东西也会不一样。好了,关于配置,就说这么多,更多的我们暂时也不需要了解了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【智能路由器】openwrt工具uci使用指南

uci(Unified Configuration Interface 统一配置界面)。它的存在就是要让openwrt系统配置集中化。 命令行格式: root@OpenWrt:/# uci U...

OpenWRT mt7620n 系统升级引起的问题

OpenWRT系统升级采用 sysupgrade 这个脚本存放在/sbin/sysupgrade. #!/bin/sh . /lib/functions.sh # initialize d...

《Linux那些事儿之我是USB》我是U盘(9)总线、设备和驱动(下)

bus上的两张链表记录了每一个设备和驱动,那么设备和驱动这两者之间又是如何联系起来的呢?此刻,必须抛出这样一个问题,先有设备还是先有驱动?在以前,先有的是设备,每一个要用的设备在计算机启动之前就已经插...

Linux那些事儿 之 戏说USB(7)不一样的core

使用命令lsmod,看看它的输出,然后找这么个模块usbcore,不要说你找不到,我不会相信的。它是什么?它就是咱们这里要说的usb系统的核心,如果要在linux里使用usb,这个模块是必不可少的,另...
  • zhqh100
  • zhqh100
  • 2015年03月24日 14:12
  • 742

Linux那些事儿 之 戏说USB(13)接口是设备的接口(二)

前面struct usb_interface里表示接口设置的struct usb_host_interface就被有意无意的飘过了,咱们在这里看看它的真面目,同样在include/linux/usb....
  • zhqh100
  • zhqh100
  • 2015年03月24日 17:03
  • 677

Linux那些事儿 之 戏说USB(30)驱动的生命线(二)

core配置设备使用的是message.c里的usb_set_configuration函数 int usb_set_configuration(struct usb_device *dev, int...
  • zhqh100
  • zhqh100
  • 2015年03月26日 20:17
  • 647

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

一个完整的USB系统应该实现上面图里的各个部分,图里主要显示了四个层次,USB物理设备(USB Physical Device)、客户软件(Client SW)、USB系统软件(USB System ...
  • zhqh100
  • zhqh100
  • 2015年03月24日 10:40
  • 515

Linux那些事儿 之 戏说USB(20)设备的生命线(三)

函数usb_control_msg调用了usb_internal_control_msg之后就去一边儿睡大觉了,脏活儿累活儿,全部留给usb_internal_control_msg去做了,这才叫骨干...
  • zhqh100
  • zhqh100
  • 2015年03月25日 15:37
  • 663

Linux那些事儿 之 戏说USB(2)漫漫辛酸路

USB的一生充满了PK,并在PK中发展,1.0、1.1、2.0,漫漫辛酸路,一把辛酸泪。我们又何尝不是,上学碰到实行自费,毕业碰到IT崩溃,工作碰到房价见鬼,现在又碰到股市泡沫,与房价PK,与庄家PK...
  • zhqh100
  • zhqh100
  • 2015年03月24日 10:01
  • 490

Linux那些事儿 之 戏说USB(16)配置

接着看usb设备的配置吧,在include/linux/usb.h里定义 struct usb_host_config { struct usb_config_descriptor desc; ...
  • zhqh100
  • zhqh100
  • 2015年03月25日 11:04
  • 880
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux那些事儿 之 戏说USB(9)我是谁
举报原因:
原因补充:

(最多只允许输入30个字)