Host Controller Driver (HCD) server for universal serial bus (USB)

Note: You must be root to start this server.


io-usb [-CcVv] [-d dll [opts] ] [-e priority]
       [-h num] [-m num] [-n name] [-P priority]...
       [-r num] [-t memory=name]

Runs on:

QNX Neutrino


Never select a configuration at enumeration time (hubs excepted).
Don't select a device configuration if the device has more than one configuration. See "Selecting a driver configuration" below.
-d dll [opts]
Load the specified host controller DLL and opts and pass it the dll. For information on the drivers and their syntax and options, see the devu-* entries.
-e priority
Set the priority of the enumeration thread.
-h num
The high watermark for the thread pool. The default is 4.
-m num
The maximum number of threads in the thread pool. The default is 8.
-n name
Set the server name. The default is /dev/io-usb/io-usb.
-P priority
The priority to use for the server; the default is 21.
-r num
Set the number of enumeration retries (default 3).
-t memory=name
Set the typed-memory name (default none, using sysram). This option tells the stack to allocate memory from the specified typed-memory region (such as the memory used for usbd_alloc(), and other internal memory that's needed to transfer data from the USB chip).
Display the server version, and then exit.
Be verbose.


The io-usb Host Controller Driver (HCD) server contains USB protocols and communicates with clients (class drivers). The USB stack is a server/dll interface that the server uses to load the DLLs that manage the USB chips. You can load drivers when you start io-usb by specifying the -d command-line option.

  • This is the host-side stack; for the device-side stack, see io-usb-dcd.
  • You can start more than one driver by using multiple -d command-line options.

Once io-usb has started, you can dynamically load and unload modules using the mount and umount commands.

The io-usb controller uses the LD_LIBRARY_PATH environment variable when searching for the shared objects. If LD_LIBRARY_PATH is not set, or the shared object in question isn't in one of its directories, or you want to override the default, specify the full path in the mount command.

For example, to mount the EHCI (high speed) USB driver:

mount -Tio-usb /dev/io-usb/io-usb

To mount the OHCI (full/low speed) USB driver:

mount -Tio-usb /dev/io-usb/io-usb

To mount the UHCI (full/low speed) USB driver:

mount -Tio-usb /dev/io-usb/io-usb

To mount the XHCI (high/full/low speed) USB driver:

mount -Tio-usb /dev/io-usb/io-usb

Selecting a driver configuration

You should use the -c option in conjunction with a launcher application, such as usblauncher (see the Device Publishers Developer's Guide), which choose a driver's configuration before launching the driver to manage a device's interfaces.

A launcher application must choose a default configuration for devices with more than one configuration, or these devices will not function:

Note: Some devices may not be able to switch the configuration once an initial configuration is selected.


Start the USB 2.0 stack and USB drivers:

io-usb -dehci -dohci -duhci -dxhci

or use this sequence of commands to do the same thing:

io-usb &
mount -T io-usb /dev/io-usb/io-usb
mount -T io-usb /dev/io-usb/io-usb
mount -T io-usb /dev/io-usb/io-usb
mount -T io-usb /dev/io-usb/io-usb

Unload a module:

umount /dev/io-usb/