Библиотека сайта rus-linux.net
Chapter 3. Using Linux USB
Reading the Linux USB Device Filesystem output
The USB device filesystem is a dynamically generated filesystem that
complements the normal device node system, and can be used to write
user space device drivers. Writing of user space device drivers is
covered in the programmer's section of this guide. In addition to the
device nodes, there are two files that are also generated - the
drivers and devices files.
If you followed the instructions in the installation chapter, you
should find them as /proc/bus/usb/drivers and
/proc/bus/usb/device respectively. If the
/proc/bus/usb directory is empty, you have not
mounted the filesystem, or you have mounted it in the wrong location.
/proc/bus/usb/drivers just lists the currently
registered drivers (even if the driver is not being used by any device).
This is most useful when testing module installation, and checking for
USB support in an unknown kernel. Here is an example of its use:
[bradh@rachel bradh]$ more /proc/bus/usb/drivers hid ov511 cpia printer hub |
/proc/bus/usb/devices lists information about
the devices currently attached to the USB bus. This is very useful when
trying to figure out if the device is correctly enumerated. Here is an
example of its use, showing the root hub, a hub, a mouse and a
camera:
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 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=01 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=12 MxCh= 0 D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0553 ProdID=0002 Rev= 1.00 C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=400mA I: If#= 1 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=00 Prot=ff Driver=cpia E: Ad=81(I) Atr=01(Isoc) MxPS= 0 Ivl= 1ms I: If#= 1 Alt= 1 #EPs= 1 Cls=ff(vend.) Sub=00 Prot=ff Driver=cpia E: Ad=81(I) Atr=01(Isoc) MxPS= 448 Ivl= 1ms I: If#= 1 Alt= 2 #EPs= 1 Cls=ff(vend.) Sub=00 Prot=ff Driver=cpia E: Ad=81(I) Atr=01(Isoc) MxPS= 704 Ivl= 1ms I: If#= 1 Alt= 3 #EPs= 1 Cls=ff(vend.) Sub=00 Prot=ff Driver=cpia E: Ad=81(I) Atr=01(Isoc) MxPS= 960 Ivl= 1ms T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 5 Spd=1.5 MxCh= 0 D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=046d ProdID=c001 Rev= 1.10 S: Manufacturer=Logitech S: Product=USB-PS/2 Mouse C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 50mA I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=hid E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl= 10ms |
The information in the /proc/bus/usb/devices output
is arranged in groups:
- The line that starts with
T:is the topology.Busindicates which bus the device is on.Levindicates the level of the device, starting at level 00 for the root hub, level 01 for any device attached to the root hub, level 02 for devices attached to hubs at level 01, and so on.Prntis the parent device for this device (always 00 for the root hub, and 01 for the devices attached to the root hub).Portis the port on the parent device, starting at 00 for the first port on each device.Prnt/Portis unique per bus.Cntindicates what number device this is, at this level, based on the enumeration order within that level of the topology, starting at 01 for the first device.Dev#indicates what number device this is, irrespective of level, based on the bus enumeration order. This is unique per bus.Spdindicates what speed this device is running at, in Mbps (either 1.5 or 12 with the current version of USB).MxChindicates how many devices can be connected to this device, and is 00 for anything except a hub.Driverindicates which device driver is being used for this device - an entry of(none)indicates that no driver is being used. - The line that starts with
D:is information from the device descriptor.Verindicates which USB specification version the device claims to meet.Clsindicates which device class the device is claiming to meet, in both hexadecimal and as a string. AClsentry of00(>ifc)indicates that the device class specification compliance is interface dependent, and the interface descriptor should be read for device class information.Subindicates which sub-class (within theClsentry), the device meets.Protindicates which protocol within a class or sub-class the device claims to meet.MxPSindicates how big the packets from Endpoint 0 are.#Cfgsindicates how many configurations this device has. - Much like
D:, the line that starts withP:is information from the device descriptor, and is seperated mainly because it wouldn't all fit on one line.Vendorindicates the Vendor Identification code for the device, andProdIDindicates the Product Identification code for the device.Revindicates the product revision number. - Refer to the USB specification clause 9.7.1 for further information on device descriptors.
- The lines that start with
S:, if any, are the vendor and product strings that the device returned. - The line that starts with
C:is information from the configuration descriptor - the number ofC:lines per device is given by#Cfgs, and the entry followed by an asterisk is the current configuration.#Ifindicates how many interfaces the device has.Cfg#indicates which configuration is being described.Atris a hexadecimal indication of the device attributes (0x80 for bus-powered, 0x40 for self-powered, 0x20 for remote wake-up capable).MxPwris the maximum power draw for this device configuration, in milliamps. Refer to USB specification clause 9.7.2 for further information on configuration descriptors. - The line that starts with
I:is information from the interface descriptor - the number ofI:lines perC:line is given by the#Ifsentry.If#indicates which interface is being described within a given device configuration.Altindicates which alternate setting of this interface is being described.#EPsindicates how many endpoints there are within the alternate setting for this endpoint.Clsindicates which class the alternate setting of the interface corresponds to, in both hexadecimal and as a character string.Subindicates which sub-class the alternate setting of the interface belongs to.Protindicates which interface protocol (within a class and sub-class tuple) the alternate setting of the interface conforms to.Driverindicates which of the various USB drivers has claimed this interface. See USB specification clause 9.7.3 for further information. - The line that starts with
E:is information from the endpoint descriptor - the number ofE:lines perI:line is given by the#EPsentry. Endpoint 0 is not displayed.Adindicates the endpoint address, with a letter to indicate whether the endpoint is an In or Out endpoint.Atrindicate the attribute (transfer type) associated with the endpoint, followed by a string translating the transfer type.MxPSindicates the maximum packet size this endpoint is capable of sending or receiving, as appropriate.Ivlindicates the interval, in milliseconds, between polling of interrupt endpoints.Ivlis ignored for bulk and control transfers, and is set to 1 for isochronous transfers. See USB specification clause 9.7.4 for further information on endpoint descriptors.
Refer to linux/Documentation/usb/proc_usb_info.txt for
more information on using the USB device filesystem information.
