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得到。