简介 |
内容推荐 本书是经典著作《Linux设备驱动程序》的第3版。如果您希望在Linux操作系统上支持计算机外部设备,或者在Linux止运行新的硬件,或者只是希望一般性地了解Linux内核的编程,就一定要阅读本书。本书描述了如何针对各种设备编写驱动程序,而在过去,这些内容仅仅以口头形式交流,或者零星出现在神秘的代码注释中。 本书的作者均是Linux社区的领导者。Jonathan Corbet虽不是专职的内核代码贡献者,但他是备受关注的LwN.net新闻及信息网站的执行编辑。Alessandro Rubini是一名Linux代码贡献者,也是活跃的意大利Linux社区的灵魂人物。Greg Kroah-Hartman是目前内核中USB、PCI和驱动程序核心子系统(本书均有讲述)的维护者。 本书的这个版本已针对Linux内核的2.6.10版本彻底更新过。内核的这个版本针对常见任务完成了合理化设计及相应的简化,如即插即用、利用sysfs文件系统和用户空间交互,以及标准总线上的多设备管理等等。 要阅读并理解本书,您不必首先成为内核黑客;只要您理解c语言并具有unix系统调用的一些背景知识即可。您将学到如何为字符设备、块设备和网络接口编写驱动程序。为此,本书提供了完整的示例程序,您不需要特殊的硬件即可编译和运行这些示例程序。本书还在单独的章节中讲述了PCI、UsB和tty(终端)子系统。对期望了解操作系统内部工作原理的读者来讲,本书也深入阐述了地址空间、异步事件以及I/O等方面的内容。 目录 Preface 1. An Introduction to Device Drivers The Role of the Device Driver Splitting the Kernel Classes of Devices and Modules Security Issues Version Numbering License Terms Joining the Kernel Development Community Overview of the Book 2. 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 Quick Reference 3. 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 Quick Reference 4. Debugging Techniques Debugging Support in the Kernel Debugging by Printing Debugging by Querying Debugging by Watching Debugging System Faults Debuggers and Related Tools 5. Concurrency and Race Conditions Pitfalls in scull Concurrency and Its Management Semaphores and Mutexes Completions Spinlocks Locking Traps Alternatives to Locking Quick Reference 6. Advanced Char Driver Operations ioctl Blocking I/O poll and select Asynchronous Notification Seeking a Device Access Control on a Device File Quick Reference 7. Time, Delays, and Deferred Work Measuring Time Lapses Knowing the Current Time Delaying Execution Kernel Timers Tasklets Workqueues Quick Reference 8. Allocating Memory The Real Story of kmalloc Lookaside Caches get_flee_page and Friends vmalloc and Friends Per-CPU Variables Obtaining Large Buffers Quick Reference 9. Communicating with Hardware I/O Ports and I/O Memory Using I/O Ports An I/O Port Example Using I/O Memory Quick Reference 10. Interrupt Handling Preparing the Parallel Port Installing an Interrupt Handler Implementing a Handler Top and Bottom Halves Interrupt Sharing Interrupt-Driven I/O Quick Reference 11. 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 Quick Reference 12. PCl Drivers The PCI Interface A LookBackl. ISA PC/104 and PC/104+ Other PC Buses SBus NuBus External Buses Quick Reference 13. USB Drivers USB Device Basics USB and Sysfs USB Urbs Writing a USB Driver USB Transfers Without Urbs Quick Reference 14. 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 Quick Reference 15. Memory Mapping and DMA Memory Management in Linux The mmap Device Operation Performing Direct I/O Direct Memory Access Quick Reference 16. Block Drivers Registration The Block Device Operations Request Processing Some Other Details Quick Reference 17. Network Drivers How snull Is Designed Connecting to the Kernel The net_device Structure in Detail Opening and Closing Packet Transmission Packet Reception The Interrupt Handler Receive Interrupt Mitigation Changes in Link State The Socket Buffers MAC Address Resolution Custom ioctl Commands Statistical Information Multicast A Few Other Details Quick Reference 18. TTY Drivers A Small TTY Driver tty_driver Function Pointers TTY Line Settings ioctls proc and sysfs Handling of TTY Devices The tty_driver Structure in Detail The tty_operations Structure in Detail The tty_struct Structure in Detail Quick Reference Bibliography Index
|