Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
USB(4)		       FreeBSD Kernel Interfaces Manual			USB(4)

     usb -- Universal Serial Bus

     To	compile	this driver into the kernel, place the following line in your
     kernel configuration file:

	   device usb

     Alternatively, to load the	driver as a module at boot time, place the
     following line in loader.conf(5):


     USB functions can be accessed from	userland through the libusb library.
     See libusb(3) for more information.

     FreeBSD provides machine-independent bus support and drivers for USB de-
     vices in host and device side mode.

     The usb driver has	three layers:

	   USB Controller (Bus)

	   USB Device

	   USB Driver

     The controller attaches to	a physical bus like pci(4).  The USB bus at-
     taches to the controller, and the root hub	attaches to the	controller.
     Any devices attached to the bus will attach to the	root hub or another
     hub attached to the USB bus.

     The uhub device will always be present as it is needed for	the root hub.

     The USB is	a system where external	devices	can be connected to a PC.  The
     most common USB speeds are:

	   Low Speed (1.5MBit/sec)

	   Full	Speed (12MBit/sec)

	   High	Speed (480MBit/sec)

     Each USB has a USB	controller that	is the master of the bus.  The physi-
     cal communication is simplex which	means the host controller only commu-
     nicates with one USB device at a time.

     There can be up to	127 devices connected to an USB	HUB tree.  The ad-
     dresses are assigned dynamically by the host when each device is attached
     to	the bus.

     Within each device	there can be up	to 16 endpoints.  Each endpoint	is in-
     dividually	addressed and the addresses are	static.	 Each of these end-
     points will communicate in	one of four different modes: control,
     isochronous, bulk,	or interrupt.  A device	always has at least one	end-
     point.  This endpoint has address 0 and is	a control endpoint and is used
     to	give commands to and extract basic data, such as descriptors, from the
     device.  Each endpoint, except the	control	endpoint, is unidirectional.

     The endpoints in a	device are grouped into	interfaces.  An	interface is a
     logical unit within a device, e.g., a compound device with	both a key-
     board and a trackball, would present one interface	for each.  An inter-
     face can sometimes	be set into different modes, called alternate set-
     tings, which affects how it operates.  Different alternate	settings can
     have different endpoints within it.

     A device may operate in different configurations.	Depending on the con-
     figuration, the device may	present	different sets of endpoints and	inter-

     The bus enumeration of the	USB bus	proceeds in several steps:

     1.	  Any interface	specific driver	can attach to the device.

     2.	  If none is found, generic interface class drivers can	attach.

     The USB specifications can	be found at:

     libusb(3),	aue(4),	axe(4),	axge(4), cue(4), ehci(4), kue(4), mos(4),
     ohci(4), pci(4), rue(4), ucom(4), udav(4),	uhci(4), uhid(4), ukbd(4),
     ulpt(4), umass(4),	ums(4),	uplcom(4), urio(4), uvscom(4), xhci(4)
     usbconfig(8), usbdi(9),

     The usb module complies with the USB 2.0 standard.

     The usb module has	been inspired by the NetBSD USB	stack initially	writ-
     ten by Lennart Augustsson.	 The usb module	was written by Hans Petter
     Selasky <>.

FreeBSD	13.0			April 29, 2017			  FreeBSD 13.0


Want to link to this manual page? Use this URL:

home | help