Linux Device Drivers

Linux is established as a preferred operating system across a wide range of computing environments. The Linux device driver communicates with IO devices as part of the kernel. It has to support applications and manage data access to the device. This course covers the interfaces to the Linux kernel for writing device drivers, as well as the underlying portability considerations.

After a brief review of architecture and driver concepts, the course discusses the design and implementation of device drivers in Linux in both datacenters and embedded systems environments. You will learn about kernel resource management for device drivers, their allocation and deallocation, interfaces to context management and building custom kernels. Topics include character device interfaces, time and timing, memory and address management, interrupt handling and debugging techniques. Other topics include addressing concurrency from a device driver developer perspective; e.g. the impact of CPU hyper-threading and task preemption.

The instructor will share code samples and real-world experiences of device and kernel porting to augment your learning. Your assignments will ask you to analyze, develop and debug different classes of device drivers. You will need access to a Linux environment with root privilege. Any distribution is fine as long as the Linux kernel version is 2.6 and above. Options include VMWare, VirtualBox, LiveCD, disk partition or separate drive.