Contents | Index | Search


  • Linux Device Drivers, 3rd Edition
  • Table of Contents
  • Preface
    • Jon's Introduction
    • Alessandro's Introduction
    • Greg's Introduction
    • Audience for This Book
    • Organization of the Material
    • Background Information
    • Online Version and License
    • Conventions Used in This Book
    • Using Code Examples
    • We'd Like to Hear from You
    • Safari Enabled
    • Acknowledgments
  • Chapter 1. An Introduction to Device Drivers
    • 1.1. The Role of the Device Driver
    • 1.2. Splitting the Kernel
    • 1.3. Classes of Devices and Modules
    • 1.4. Security Issues
    • 1.5. Version Numbering
    • 1.6. License Terms
    • 1.7. Joining the Kernel Development Community
    • 1.8. Overview of the Book
  • Chapter 2. Building and Running Modules
    • 2.1. Setting Up Your Test System
    • 2.2. The Hello World Module
    • 2.3. Kernel Modules Versus Applications
    • 2.4. Compiling and Loading
    • 2.5. The Kernel Symbol Table
    • 2.6. Preliminaries
    • 2.7. Initialization and Shutdown
    • 2.8. Module Parameters
    • 2.9. Doing It in User Space
    • 2.10. Quick Reference
  • Chapter 3. Char Drivers
    • 3.1. The Design of scull
    • 3.2. Major and Minor Numbers
    • 3.3. Some Important Data Structures
    • 3.4. Char Device Registration
    • 3.5. open and release
    • 3.6. scull's Memory Usage
    • 3.7. read and write
    • 3.8. Playing with the New Devices
    • 3.9. Quick Reference
  • Chapter 4. Debugging Techniques
    • 4.1. Debugging Support in the Kernel
    • 4.2. Debugging by Printing
    • 4.3. Debugging by Querying
    • 4.4. Debugging by Watching
    • 4.5. Debugging System Faults
    • 4.6. Debuggers and Related Tools
  • Chapter 5. Concurrency and Race Conditions
    • 5.1. Pitfalls in scull
    • 5.2. Concurrency and Its Management
    • 5.3. Semaphores and Mutexes
    • 5.4. Completions
    • 5.5. Spinlocks
    • 5.6. Locking Traps
    • 5.7. Alternatives to Locking
    • 5.8. Quick Reference
  • Chapter 6. Advanced Char Driver Operations
    • 6.1. ioctl
    • 6.2. Blocking I/O
    • 6.3. poll and select
    • 6.4. Asynchronous Notification
    • 6.5. Seeking a Device
    • 6.6. Access Control on a Device File
    • 6.7. Quick Reference
  • Chapter 7. Time, Delays, and Deferred Work
    • 7.1. Measuring Time Lapses
    • 7.2. Knowing the Current Time
    • 7.3. Delaying Execution
    • 7.4. Kernel Timers
    • 7.5. Tasklets
    • 7.6. Workqueues
    • 7.7. Quick Reference
  • Chapter 8. Allocating Memory
    • 8.1. The Real Story of kmalloc
    • 8.2. Lookaside Caches
    • 8.3. get_free_page and Friends
    • 8.4. vmalloc and Friends
    • 8.5. Per-CPU Variables
    • 8.6. Obtaining Large Buffers
    • 8.7. Quick Reference
  • Chapter 9. Communicating with Hardware
    • 9.1. I/O Ports and I/O Memory
    • 9.2. Using I/O Ports
    • 9.3. An I/O Port Example
    • 9.4. Using I/O Memory
    • 9.5. Quick Reference
  • Chapter 10. Interrupt Handling
    • 10.1. Preparing the Parallel Port
    • 10.2. Installing an Interrupt Handler
    • 10.3. Implementing a Handler
    • 10.4. Top and Bottom Halves
    • 10.5. Interrupt Sharing
    • 10.6. Interrupt-Driven I/O
    • 10.7. Quick Reference
  • Chapter 11. Data Types in the Kernel
    • 11.1. Use of Standard C Types
    • 11.2. Assigning an Explicit Size to Data Items
    • 11.3. Interface-Specific Types
    • 11.4. Other Portability Issues
    • 11.5. Linked Lists
    • 11.6. Quick Reference
  • Chapter 12. PCI Drivers
    • 12.1. The PCI Interface
    • 12.2. A Look Back: ISA
    • 12.3. PC/104 and PC/104+
    • 12.4. Other PC Buses
    • 12.5. SBus
    • 12.6. NuBus
    • 12.7. External Buses
    • 12.8. Quick Reference
  • Chapter 13. USB Drivers
    • 13.1. USB Device Basics
    • 13.2. USB and Sysfs
    • 13.3. USB Urbs
    • 13.4. Writing a USB Driver
    • 13.5. USB Transfers Without Urbs
    • 13.6. Quick Reference
  • Chapter 14. The Linux Device Model
    • 14.1. Kobjects, Ksets, and Subsystems
    • 14.2. Low-Level Sysfs Operations
    • 14.3. Hotplug Event Generation
    • 14.4. Buses, Devices, and Drivers
    • 14.5. Classes
    • 14.6. Putting It All Together
    • 14.7. Hotplug
    • 14.8. Dealing with Firmware
    • 14.9. Quick Reference
  • Chapter 15. Memory Mapping and DMA
    • 15.1. Memory Management in Linux
    • 15.2. The mmap Device Operation
    • 15.3. Performing Direct I/O
    • 15.4. Direct Memory Access
    • 15.5. Quick Reference
  • Chapter 16. Block Drivers
    • 16.1. Registration
    • 16.2. The Block Device Operations
    • 16.3. Request Processing
    • 16.4. Some Other Details
    • 16.5. Quick Reference
  • Chapter 17. Network Drivers
    • 17.1. How snull Is Designed
    • 17.2. Connecting to the Kernel
    • 17.3. The net_device Structure in Detail
    • 17.4. Opening and Closing
    • 17.5. Packet Transmission
    • 17.6. Packet Reception
    • 17.7. The Interrupt Handler
    • 17.8. Receive Interrupt Mitigation
    • 17.9. Changes in Link State
    • 17.10. The Socket Buffers
    • 17.11. MAC Address Resolution
    • 17.12. Custom ioctl Commands
    • 17.13. Statistical Information
    • 17.14. Multicast
    • 17.15. A Few Other Details
    • 17.16. Quick Reference
  • Chapter 18. TTY Drivers
    • 18.1. A Small TTY Driver
    • 18.2. tty_driver Function Pointers
    • 18.3. TTY Line Settings
    • 18.4. ioctls
    • 18.5. proc and sysfs Handling of TTY Devices
    • 18.6. The tty_driver Structure in Detail
    • 18.7. The tty_operations Structure in Detail
    • 18.8. The tty_struct Structure in Detail
    • 18.9. Quick Reference
  • Chapter 19. Bibliography
    • 19.1. Books
    • 19.2. Web Sites
  • Index
    • index_SYMBOL
    • index_A
    • index_B
    • index_C
    • index_D
    • index_E
    • index_F
    • index_G
    • index_H
    • index_I
    • index_J
    • index_K
    • index_L
    • index_M
    • index_N
    • index_O
    • index_P
    • index_Q
    • index_R
    • index_S
    • index_T
    • index_U
    • index_V
    • index_W
    • index_X
    • index_Z