USB devices

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:

UHCI
Universal Host Controller Interface.
EHCI
Enhanced Host Controller Interface.
OHCI
Open Host Controller Interface (made by others).
XHCI
Extensible Host Controller Interface.
Note:

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:

  1. Identify your controller.

    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.

  2. Log in as root and start the io-usb stack with the appropriate module:

    This should create an entry in /dev called /dev/io-usb/io-usb.

    Note: If you're starting the USB stack and a driver in your startup scripts, make sure that you use the waitfor command to make sure that /dev/io-usb/io-usb has appeared before you start the driver. For example:
    io-usb -dohci
    waitfor /dev/io-usb/io-usb
    devu-prn
      
  3. When the stack is running, start the device drivers, as described below.
    Note: USB hubs don't need a driver; the stack itself supports them.