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
|