Sitemap 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.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 |