⇦ prev ⇱ home next ⇨

   
Book Cover
   
•  Table of Contents
•  Index
•  Reviews
•  Examples
•  Reader Reviews
•  Errata
•  Academic
Linux Device Drivers, 3rd Edition
By Jonathan Corbet, Greg Kroah-Hartman, Alessandro Rubini
 
Publisher : O'Reilly
Pub Date : February 2005
ISBN : 0-596-00590-3
Pages : 636
 


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
 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
 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
 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
 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
 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
 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
 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
 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
 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
 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
 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
 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
 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
 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
 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
 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
 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
 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
19. Bibliography
  19.1. Books
  19.2. Web Sites
Index
⇦ prev ⇱ home next ⇨