About this course
Course Overview
Red Hat® Enterprise Linux® Kernel Device Drivers (RHD362) teaches experienced C programmers already familiar with the Linux kernel architecture the skills and strategies they need to develop device drivers.
The course covers device driver models (including character, block, and network device drivers); device interaction (including port I/O, memory mapped I/O, interrupt handling, and DMA transfers); managing PCI and USB devices; strategies for deferring activity using tasklets and work queues; device registration using the Unified Device model and the sysfs filesystem; and process interaction, including basic file operations, polling, and wait queues.
Target Audience
Experienced C programmers with a good understanding of the Linux kernel who want to learn how to develop device drivers for Linux systems.
Course Objectives
- Introduction and Review of Kernel Programming
- Device Drivers
- Unified Device Model
- Interrupt Handling
- Advanced File Operations
- Interacting With Devices
- Direct Memory Access
- PCI Drivers
- USB Drivers
- Introduction to Network Device Drivers
- Introduction to Block Device Drivers
Course Content
Introduction and Review of Kernel Programming
- * What is a Kernel?
- Linux Kernel Variants
- Interacting with the Kernel
- Kernel Implementation
- The Linux Source Tree
- Writing Kernel Modules
- Compiling Kernel Modules
- More about Kernel Modules
- Review of Kernel Structures
Device Drivers
- Device Drivers
- Device Driver Design
- Interacting with Character Device Drivers
- Interacting with Block Device Drivers
- Interacting with Network Interface Cards
- Device Nodes
- Character Device Drivers: Registration
- The Device Node Problem
- File Operations
- Defining File Operations
- Registering File Operations
- File I/O Conventions
Unified Device Model
- Device Model Objects
- The sysfs filesystem
- Device Model Structures
- Tying it all Together
- Netlink Sockets and User Events
- Userspace event agents
- Device Registration
- Miscellaneous Devices
Interrupt Handling
- Interrupt Context
- Handling Interrupts
- Interrupt Structures
- ISR Registration
- System Context
- Softirqs
- Deferred Activity: Tasklets
- Deferred Activity: Work Queues
- Custom Work Queues
- Example: Serial Mouse
Advanced File Operations
- IOCTLs
- IOCTL Conventions
- Implementing IOCTLs
- Lockless IOCTLs
- Sleeping
- Wait Queues
- Wait Queues
- Variations on wait_event()
- Sleeping in System Calls
- Multiplexed I/O
- Polling
Interacting With Devices
- Device Interaction
- Managing Exclusive Access
- I/O Ports
- I/O Memory Buffers
- Accessing I/O Memory Buffers
- Userspace Drivers
Direct Memory Access
- Managing DMA
- Initializing DMA
- Coherent Allocations
- Streaming DMA Mappings
PCI Drivers
- Peripheral Component Interconnect
- PCI Configuration Space
- PCI Driver Registration
- Registering PCI Drivers
- Driver Probe Function
- Initializing PCI devices
- Releasing a PCI Device
- Managing PCI Resources
- Accessing Configuration Space
- Listing PCI Devices
USB Drivers
- The Universal Serial Bus
- USB Descriptors
- USB Transfer Types
- Linux USB Implementation
- USB Drivers
- USB Registration
- Initializing USB Interfaces
- USB Class Drivers
- USB Request Blocks
- Using USB request blocks
- Synchronous USB Requests
- More information
Introduction to Network Device Drivers
- Networking
- Network Devices
- Network Device Callback Functions
- Network Driver Initialization
- Network Driver Transmission Queue Control
- Network Statistics
- Socket Buffers (Packets)
- Socket Buffer API
- Transmission
- Reception
- Example Implementations
Introduction to Block Device Drivers
- Block Devices
- I/O Scheduling
- Linux 2.6 Elevator Functions
- Block Device Driver Implementation
- Block Device Registration
- Block Device File Operations
- The gendisk structure
- Request Queues
- Initialization Example
- Handling Requests
Course Prerequisites
- Experience in C programming
- Red Hat Enterprise Linux Kernel Internals (RHD361) or equivalent experience