It requires certain precautions to connect new device hardware to a Linux machine. Apart from the required hardware interfaces, additional code must be added to the Linux kernel to interface between the hardware and the generic kernel routines of the I/O-subsystem. In order to write a device driver detailed knowledge is required of the internal concepts of certain parts of the Linux kernel, of the way the Linux kernel communicates with the device driver (and vice versa) and of the way a device driver handles the physical device. In addition, experience is needed with various types of device drivers and the way a new device driver can be loaded into the kernel.
A step by step construction of an actual device driver is part of the course, adding features as their theoretical coverage progresses.
The specific details of USB drivers are a separate topic in this course.
Course attendees receive the following documentation: