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, EHCI, or XHCI). 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 https://www.pcilookup.com/.
The class codes that appear in the output from pci -vvv are:
Class Code | Controller Type |
---|---|
0c0300 | UHCI |
0c0310 | OHCI |
0c0320 | EHCI |
0c0330 | XHCI |
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