Previous Section  < Day Day Up >  Next Section

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