代码改变世界

proc文件系统usb部分信息输出

2011-04-21 16:31  白居不易  阅读(1059)  评论(0编辑  收藏  举报

http://blog.csdn.net/workingon/archive/2005/08/31/468684.aspx

 

/proc/bus/usb 文件系统输出
===============================
(version 2000.08.15)


/proc 文件系统中USB devices 部分产生
/proc/bus/usb/drivers 和 /proc/bus/usb/devices.

/proc/bus/usb/drivers 列出已经注册的drivers,
每行一个driver, 可能的话给出每个driver's USB 次设备节点号的范围


**注意**: 如果 /proc/bus/usb 是空的, 需要以root用户挂载文件系统:
         mount -t usbdevfs none /proc/bus/usb

   或者在/etc/fstab文件中添加
      none  /proc/bus/usb  usbdevfs  defaults  0  0
    这将在每次重启时自动挂载usbdevfs.
   可以用 `cat /proc/bus/usb/devices` 查看USB设备信息。

挂载USB的更多帮助信息可以查看USB指南的"USB Device Filesystem" 节,USB指南的
最新拷贝见http://www.linux-usb.org/

在 /proc/bus/usb/devices中, 每个device具有多行ASCII 输出.
如果使用辅助程序,  "T:" 行的头4列可以用以建立一个USB拓扑图 (拓扑信息:
Lev, Prnt, Port, Cnt)

每行由一个字符的ID来标识:

T = Topology (etc.)
B = Bandwidth (只用于USB host控制器 它被虚拟为root hubs)
D = Device 描述信息.
P = Product ID 信息. 
S = String 描述.
C = Configuration 描述信息(* = 活动配置)
I = Interface 描述信息.
E = Endpoint 描述信息.

=======================================================================

/proc/bus/usb/devices 输出格式:

Legend:
  d = 十进制数 (用spaces or 0's开头)
  x = 十六进制数 (用spaces or 0's开头)
  s = string


拓扑信息:

T:  Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=ddd MxCh=dd
|   |      |      |       |       |      |        |       |__MaxChildren(最在子节点)
|   |      |      |       |       |      |        |__Device Speed in Mbps(设备速度,单位是Mbps)
|   |      |      |       |       |      |__DeviceNumber(设备号)
|   |      |      |       |       |__Count of devices at this level(本层次的设备数)
|   |      |      |       |__Connector/Port on Parent for this device(本设备在父节点的接口)
|   |      |      |__Parent DeviceNumber(父设备号)
|   |      |__Level in topology for this bus(本BUS的拓扑层次)
|   |__Bus number(总线号)
|__Topology info tag(拓扑信息标识)


带宽信息:
B:  Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd
|   |                       |         |__Number if isochronous requests(同步请求号)
|   |                       |__Number of interrupt requests(中断请求号)
|   |__Total Bandwidth allocated to this bus(分到本bus的总带宽)
|__Bandwidth info tag(带宽信息标识)


设备描述信息与产品ID信息:

D:  Ver=x.xx Cls=xx(s) Sub=xx Prot=xx MxPS=dd #Cfgs=dd
P:  Vendor=xxxx ProdID=xxxx Rev=xx.xx

其中
D:  Ver=x.xx Cls=xx(sssss) Sub=xx Prot=xx MxPS=dd #Cfgs=dd
|   |        |             |      |       |       |__NumberConfigurations(配置数)
|   |        |             |      |       |__MaxPacketSize of Default Endpoint(默认端点的最大包大小)
|   |        |             |      |__DeviceProtocol(设备协议)
|   |        |             |__DeviceSubClass(设备子类)
|   |        |__DeviceClass(设备类)
|   |__Device USB version(设备的USB版本)
|__Device info tag #1(设备标识#1)

其中
P:  Vendor=xxxx ProdID=xxxx Rev=xx.xx
|   |           |           |__Product revision number(产品修订号)
|   |           |__Product ID code(产品ID编码)
|   |__Vendor ID code(厂家ID编码)
|__Device info tag #2(设备标识#2)


字符串描述信息:

S:  Manufacturer=ssss
|   |__Manufacturer of this device as read from the device.(从设备读得的生产者)
|__String info tag(字符信息标识)

S:  Product=ssss
|   |__从设备读得的产品信息,除去那些USB主控制器产生的字符串,格式 "USB *HCI Root Hub".
|__String info tag(字符信息标识)

S:  SerialNumber=ssss
|   |__从设备读得的设备Serial Number ,除去那些USB主控制器产生的字符串, 代表主控制器
|      在系统中唯一标识 (当前是 I/O 或 memory-mapped base 地址).
|__String info tag(字符信息标识)


配置描述信息:

C:  #Ifs=dd Cfg#=dd Atr=xx MPwr=dddmA
|   |       |       |      |__MaxPower in mA(最大功率,mA)
|   |       |       |__Attributes(属性)
|   |       |__ConfiguratioNumber(配置数)
|   |__NumberOfInterfaces(接口数)
|__Config info tag(配置信息标识)


接口描述信息 (每配置可以是多个):

I:  If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=ssss
|   |      |      |       |             |      |       |__Driver name(驱动名)
|   |      |      |       |             |      |__InterfaceProtocol(接口协议)
|   |      |      |       |             |__InterfaceSubClass(接口子类)
|   |      |      |       |__InterfaceClass(接口类)
|   |      |      |__NumberOfEndpoints(端点号)
|   |      |__AlternateSettingNumber(接口设置号)
|   |__InterfaceNumber(接口号)
|__Interface info tag(接口信息标识)


端点描述信息(每接口可以是多个):

E:  Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddms
E:  Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddms
|   |        |            |         |__Interval(间隔)
|   |        |            |__EndpointMaxPacketSize(端点最大包大小)
|   |        |__Attributes(EndpointType)(端点属性)
|   |__EndpointAddress(I=In,O=Out) (端点地址)
|__Endpoint info tag(端点信息标识)

=======================================================================
如果用户只对拓扑信息感兴趣,可以用:"grep ^T: /proc/bus/usb/devices"只显示拓扑行。
而命令行:"grep -i ^[tdp]: /proc/bus/usb/devices" 可用于只显示出以tdp开头的行。

例如, 系统有一个UHCI root hub,一个外部hub连接到root hub,一个mouse和串行转换器连到该hub.

T:  Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc= 28/900 us ( 3%), #Int=  2, #Iso=  0
D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB UHCI Root Hub
S:  SerialNumber=dce0
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms
T:  Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 4
D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0451 ProdID=1446 Rev= 1.00
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=255ms
T:  Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  3 Spd=1.5 MxCh= 0
D:  Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=04b4 ProdID=0001 Rev= 0.00
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=mouse
E:  Ad=81(I) Atr=03(Int.) MxPS=   3 Ivl= 10ms
T:  Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#=  4 Spd=12  MxCh= 0
D:  Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0565 ProdID=0001 Rev= 1.08
S:  Manufacturer=Peracom Networks, Inc.
S:  Product=Peracom USB to Serial Converter
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=00(>ifc ) Sub=00 Prot=00 Driver=serial
E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl= 16ms
E:  Ad=01(O) Atr=02(Bulk) MxPS=  16 Ivl= 16ms
E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=  8ms


只选择 "T:" and "I:" 行 :

T:  Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
T:  Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 4
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
T:  Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  3 Spd=1.5 MxCh= 0
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=mouse
T:  Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#=  4 Spd=12  MxCh= 0
I:  If#= 0 Alt= 0 #EPs= 3 Cls=00(>ifc ) Sub=00 Prot=00 Driver=serial


物理上应该是这样的 (或者说可以变为):

                      +------------------+
                      |  PC/root_hub (12)|   Dev# = 1
                      +------------------+   (nn) is Mbps.
  Level 0             |  CN.0   |  CN.1  |   [CN = connector/port #]
                      +------------------+
                          /
                         /
            +-----------------------+
  Level 1   | Dev#2: 4-port hub (12)|
            +-----------------------+
            |CN.0 |CN.1 |CN.2 |CN.3 |
            +-----------------------+
                /           /____________________
                 /_____                          /
                       /                          /
               +--------------------+      +--------------------+
  Level 2      | Dev# 3: mouse (1.5)|      | Dev# 4: serial (12)|
               +--------------------+      +--------------------+

 

以树型结构表示 (没有实际连接的ports [Connectors] 被省略):

PC:  Dev# 1, root hub, 2 ports, 12 Mbps
|_ CN.0:  Dev# 2, hub, 4 ports, 12 Mbps
     |_ CN.0:  Dev #3, mouse, 1.5 Mbps
     |_ CN.1:
     |_ CN.2:  Dev #4, serial, 12 Mbps
     |_ CN.3:
|_ CN.1:

 

另外,USB设备分类 

USB从设备的分类可以从USB设备接口描述符(Standard   Interface   Descriptor)对应的的bInterfaceClass这一个byte得到。   
bInterfaceClass的典型代码为1,2,3,6,7,8,9,10,11,255。分别代表意思为1-audio:表示一个音频设   备。2-communication   device:通讯设备,如电话,moden等等。3-HID:人机交互设备,如键盘,鼠标等。6-image图象设备,如扫描仪,摄像头等,有时数码相   机也可归到这一类。7-打印机类。如单向,双向打印机等。8-mass   storage海量存储类。所有带有一定存储功能的都可以归到这一类。如数码相机大多数都归这一类。9-hub类。11-chip   card/smart   card。255-vendor   specific.厂家的自定义类,主要用于一些特殊的设备。如接口转接卡等。