Linux Device Drivers Online Training Course Content

Modules

  • Building and Running Modules
  • Setting Up Your Test System
  • The Hello World Module
  • Kernel Modules Versus Applications
  • Compiling and Loading
  • The Kernel Symbol Table
  • Preliminaries
  • Initialization and Shutdown
  • Module Parameters
  • Doing It in User Space

Data Types in the Kernel

  • Use of Standard C Types
  • Assigning an Explicit Size to Data Items
  • Interface-Specific Types
  • Other Portability Issues
  • Linked Lists

The Linux Device Model

  • Kobjects, Ksets, and Subsystems
  • Low-Level Sysfs Operations
  • Hotplug Event Generation
  • Buses, Devices, and Drivers
  • Classes
  • Putting It All Together
  • Hotplug
  • Dealing with Firmware

Memory Mapping and DMA

  • Memory Management in Linux
  • The mmap Device Operation
  • Performing Direct I/O
  • Direct Memory Access

Communicating with Hardware

  • I/O Ports and I/O Memory
  • Using I/O Ports
  • An I/O Port Example
  • Using I/O Memory

Interrupt Handling

  • Preparing the Parallel Port
  • Installing an Interrupt Handler
  • Implementing a Handler
  • Top and Bottom Halves
  • Interrupt Sharing
  • Interrupt-Driven I/O

Char Drivers

  • The Design of scull
  • Major and Minor Numbers
  • Some Important Data Structures
  • Char Device Registration
  • open and release
  • scull’s Memory Usage
  • read and write
  • Playing with the New Devices

Block Drivers

  • Registration
  • The Block Device Operations
  • Request Processing

Debugging Techniques

  • Debugging Support in the Kernel
  • Debugging by Printing
  • Debugging by Querying
  • Debugging by Watching
  • Debugging System Faults
  • Debuggers Tools

Concurrency and Race Conditions

  • Pitfalls in scull
  • Concurrency and Its Management
  • Semaphores and Mutexes
  • Completions
  • Spinlocks
  • Locking Traps
  • Alternatives to Locking

Time, Delays, and Deferred Work

  • Measuring Time Lapses
  • Knowing the Current Time
  • Delaying Execution
  • Kernel Timers
  • Tasklet
  • Workqueues

Memory Management

  • The Real Story of kmalloc
  • Lookaside Caches
  • get_free_page and Friends
  • vmalloc and Friends
  • Per-CPU Variables
  • Large Buffer processing

Advanced Char Driver Operations

  • ioctl
  • Blocking I/O
  • poll and select
  • Asynchronous Notification
  • Seeking a Device
  • Access Control on a Device File

Network Drivers

  • How snull Is Designed
  • Connecting to the Kernel
  • The net_device Structure
  • Opening and Closing
  • Packet Transmission
  • Packet Reception
  • The Interrupt Handler
  • Receive Interrupt Mitigation

TTY Drivers

  • Small TTY Driver
  • tty_driver Function Pointers
  • TTY Line Settings
  • ioctls
  • proc and sysfs Handling of TTY Devices
  • The tty_driver Structure
  • The tty_operations Structure
  • The tty_structStruc