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设备当然有不同的配置了,或者说需要配置哪些东西也会不一样。好了,关于配置,就说这么多,更多的我们暂时也不需要了解了。

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

《Linux那些事儿之我是USB》前言

1992年,那是一个春天。不过其实1991年又何尝不是一个春天呢,因为正是在那一年,Linux诞生了。又因为开放源代码的缘故,十几年来Linux是越来越火,熊熊火焰也烧到了华夏大地。诸多高校开始开设L...
  • fudan_abc
  • fudan_abc
  • 2010年07月29日 12:34
  • 17614

《Linux那些事儿之我是USB》我是U盘(18)冬天来了,春天还会远吗?(四)

结束了get_device_info,我们继续沿着storage_probe一步一步地走下去。继续,这就是我们前面提到过的三个函数,get_transport、get_protocol和get_pip...
  • fudan_abc
  • fudan_abc
  • 2011年10月10日 21:49
  • 5759

《Linux那些事儿之我是USB》我是U盘(14)冰冻三尺非一日之寒

罗马不是一天建成的。在让U盘工作之前,其实我们的驱动做了很多准备工作。 我们继续跟着感觉走,storage_probe(),972行至975行,一系列的以init_*命名的函数在此刻被调用,这里涉及...
  • fudan_abc
  • fudan_abc
  • 2011年09月21日 22:58
  • 6878

Linux那些事儿之我是U盘 提供pdf下载

http://www.newsmth.net/att.php?p.299.44271.374.pdf还会继续修改,主要是加入一些图片.比如传输协议的,数据格式的,函数调用关系的图片.预计会在9月初提供...
  • fudan_abc
  • fudan_abc
  • 2007年08月07日 17:21
  • 12207

我是。。。。。

我是逗比张,哈哈哈哈哈哈嚯嚯嚯嚯嚯
  • Aaron_Zhang939
  • Aaron_Zhang939
  • 2018年01月31日 22:06
  • 6

Linux那些事儿之我是Hub(10)While You Were Sleeping(三)

get_hub_descriptor()结束了,然后就返回hub_configure()中来.635到642行,判断刚才的返回值,小于零当然是出错了,大于零也还要多判断一次, USB_MAXCHILD...
  • fudan_abc
  • fudan_abc
  • 2007年08月23日 22:31
  • 5936

Linux那些事儿 之 我是PCI(0)引子

老夫子们痛心疾首的总结说,现代青年的写照是——自负太高,反对太多,商议太久,行动太迟,后悔太早。上天戏弄,俺不幸的混进了80后的革命队伍里,成了一名现代青年,前有老夫子的忧心忡忡,后有90后的轻蔑嘲弄...
  • fudan_abc
  • fudan_abc
  • 2007年11月09日 15:01
  • 9239

【转】 Linux那些事儿之我是U盘(26)第一次亲密接触(二)

对于设备驱动程序而言,控制传输要做的事情很简单,向usb core提交一个urb,这个urb中间包含了一个命令,或者说控制请求,因为命令更适合于我们后来要讲的某个重要的概念.这里我们要发送的就是GET...
  • aaronychen
  • aaronychen
  • 2008年01月26日 09:55
  • 614

Linux那些事儿之我是Sysfs(4)举例一lddbus

对了,你得把ldd3的examples代码下下来。不然没法继续了。接下来我们从例子着手,localhost:/home/XX/examples/lddbus#insmod lddbus.ko此时再看/...
  • fudan_abc
  • fudan_abc
  • 2007年09月01日 16:12
  • 17967

J2ME游戏中的图标问题~

有时有人会反应JAVA游戏中图标怎么会变的这么小比如如下的:其实是做的时候选择图标的时候要选好尺寸~,一般为32X29就可以尺寸不合自然会变小,如下就是正常的...
  • felio
  • felio
  • 2005年04月07日 09:50
  • 848
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux那些事儿 之 戏说USB(9)我是谁
举报原因:
原因补充:

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