The USB core contains routines common to all USB device drivers and host controller drivers. These functions can be grouped into an upper and a lower API layer. As shown in figure 3 there exists an API for USB device drivers and another one for host controllers. The following section concentrates on the USB device driver layer, because the development for host controller drivers is already finished.
This section will give an overview of the USB framework by explaining entry points and the usage of API functions. If you are not familar with linux device drivers the following section might not be very useful. Appropriate literature can be found here [8], [9].