This document summarizes a study of USB device drivers under Linux. It begins by providing background on USB and its goals of universality and supporting different device speeds. It then describes the process that occurs when a USB device is plugged in, including collecting descriptors and assigning an endpoint ID. The document outlines the different transfer modes and discusses descriptors, which provide device details. It also maps out the structure of USB drivers in Linux, including modules like the USB core and host controller interface. Key data structures in USB skeleton drivers are identified. The document ends by discussing USB driver functions in Linux and the sequence of calls that occur over the driver lifecycle.