This course will enhance your understanding of the art of writing Linux device drivers beyond the basic device driver course. Students will continue to explore the Linux Block IO layer, architecture for character, serial and input drivers, and become familiar with details of the USB, PCI family (PCI-E, PCIe) subsystems, and Frame Buffer API.
Topics covered include Linux kernel services and kernel facilities; Linux device model and interrupt handling; memory mapping and DMA techniques; Linux-USB subsystem for writing drivers for USB devices; PCI bus family of devices; layered architecture of serial drivers; Linux video subsystem and frame buffer API; USB-to-serial converter, PCI, Ethernet, and SCSI drivers. The class will conduct source code review from driver families such as USB-to-Serial Converter, PCI Ethernet, and SCSI. Discussion will also involve live debugging with Kprobes, and profiling with Oprofile.
Students will be assigned a project to develop a device driver. We will also survey industry trends, including virtualized drivers Xen, iSCSI, and SATA. Upon completion, students will have acquired advanced knowledge of the Linux device drivers with exposure to practical driver examples that they can readily apply in their work environment.
Completion of "Linux Device Drivers" course or equivalent industry experience. This is an advanced course, the introductory lessons on device drivers will not be repeated in this course.