Linux Kernel & Drivers
The growing popularity of Linux—the preferred operating system for servers, embedded systems, and mobile devices—is driving a huge demand for programmers who can modify the open-source kernel for optimal performance. In this course you will gain in-depth knowledge of the latest 5.x kernel so you can understand the architecture and write kernel code to achieve a desired output.
The course introduces kernel-level programming in Linux and writing kernel modules, covering core kernel with a hands-on coding approach. We will start with the kernel source code organization, learn how it functions and address various data structures and algorithms used in the Linux kernel. Students will explore making static and dynamic changes to the kernel as well as the underlying portability considerations.
We will explore the design and implementation of device drivers in Linux, such as the interfaces to the Linux kernel for writing device drivers, resource allocation paradigms and error-handling best practices. Other topics include understanding concurrency from a driver perspective, for example, 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. In your assignments you will get to analyze, develop, and debug different modules and kernel drivers. Any distribution is fine so long as the Linux kernel version is recent.
- Review of Linux architecture
- Compiling a custom kernel
- Building and running kernel modules
- Debug interfaces for kernel and PROCFS
- Notion of time and timing in the kernel: dealing with fine-granular latencies
- Memory management
- Process creation and termination, process scheduling, signals
- Kernel concurrency and synchronization: primitives and design considerations
- Terms and concepts for device drivers
- Character device driver methods IOCTL, LSEEK, MMAP, scatter-gather IO
- Hardware management and interfaces
- Deferred execution and interrupt handling
- Portability considerations
- Block driver interfaces and design
- Performance tuning
Skills Needed: Proficiency of C programming language and knowledge of Linux Systems Programming or equivalent experience is recommended. You will need access to a Linux environment with root privileges. Options include VMWare, VirtualBox, LiveCD, disk partition or dualboot.
Course Availability Notification
Please use this form to be notified when this course is open for enrollment.
Ask us any questions you may have about this course.