The USB bus in Linux
As already stated, both the USB host and USB device exist, and the same is valid for the Linux kernel, where we can find dedicated device drivers for both types. The only difference is that, in the kernel, the USB devices are named USB gadgets to avoid misunderstanding the typical meaning of the word device.
The USB hosts are all those devices that act as a master in a USB communication. Typically, a PC acts as a master, but an embedded computer can act as a USB gadget too. If you remember what we saw in The first login section of Chapter 1, Installing the Developing System, where we described how to boot for the first time, the BeagleBone Black was the USB gadget, while the host PC was the USB host.
The USB communication is very simple: there is a master that polls the various peripheral devices. This poll is done using several channels called endpoints, which can carry data in one direction only, either from the host computer to the device (so, the endpoint is called...