A Universal Serial Bus (USB) provides a hot-swappable, common interface for USB devices (e.g., network, input, character I/O, audio, and hubs).
For more information on USB, USB specifications, and a list of frequently asked questions, see www.usb.org.
If you don't know what kind of USB device you're using, you can use the usb utility to identify it:
usb -vvv | less
The output from this command looks like this:
Device Address : 1 Vendor : 0x05c7 (QTRONIX) Product : 0x2011 (USB Keyboard and Mouse) Device Release : r1.12 USB Spec Release : v1.00 Serial Number : N/A Class : 0x00 (Independent per interface) Max PacketSize0 : 8 Languages : 0x0409 (English) Current Frame : 511 (1024 bytes) Configurations : 1 Configuration : 1 Attributes : 0xa0 (Bus-powered, Remote-wakeup) Max Power : 50 mA Interfaces : 2 Interface : 0 / 0 Class : 0x03 (HID) Subclass : 0x01 (Boot interface) Protocol : 0x01 (Keyboard) Endpoints : Control + 1 Endpoint : 0 Attributes : Control Max Packet Size: 8 Endpoint : 1 Attributes : Interrupt/IN Max Packet Size: 8 Interval : 20 ms Interface : 1 / 0 Class : 0x03 (HID) Subclass : 0x01 (Boot interface) Protocol : 0x02 (Mouse) Endpoints : Control + 1 Endpoint : 0 Attributes : Control Max Packet Size: 8
The vendor and product fields indicate the type of device, and possibly what chipset it uses.
The common types of USB controllers are:
The operating system needs to run the stack in order to know how to interact with USB devices and controllers.
To start the USB stack, you need to:
The documentation for the hardware should describe the type of controller (OHCI, UHCI, or EHCI). If you don't know what type of controller you're using, you can identify it using:
pci -vvv
Find the entry for the USB controller to determine the manufacturer/vendor ID and device ID. You can either find the information on the manufacturer's website (www.usb.org), or use the vendor and device IDs to cross-reference it at http://www.pcidatabase.com//.
The class codes that appear in the output from pci -vvv are:
Class Code | Controller Type |
---|---|
0c0300 | UHCI |
0c0310 | OHCI |
0c0320 | EHCI |
There might be multiple chips and therefore multiple drivers that you need to load.
You can also try running just one of the USB stacks; if it fails, try running another stack.
This should create an entry in /dev called /dev/io-usb/io-usb.
io-usb -dohci waitfor /dev/io-usb/io-usb devu-prn