le width="100%"><tr><td> Preface </td></tr></table><table width="100%"><tr><td> 1. An Introduction to Device Drivers </td></tr></table><table width="100%"><tr><td> The Role of the Device Driver </td></tr></table><table width="100%"><tr><td> Splitting the Kernel </td></tr></table><table width="100%"><tr><td> Classes of Devices and Modules </td></tr></table><table width="100%"><tr><td> Security Issues </td></tr></table><table width="100%"><tr><td> Version Numbering </td></tr></table><table width="100%"><tr><td> License Terms </td></tr></table><table width="100%"><tr><td> Joining the Kernel Development Community </td></tr></table><table width="100%"><tr><td> Overview of the Book </td></tr></table><table width="100%"><tr><td> 2. Building and Running Modules </td></tr></table><table width="100%"><tr><td> Setting Up Your Test System </td></tr></table><table width="100%"><tr><td> The Hello World Module </td></tr></table><table width="100%"><tr><td> Kernel Modules Versus Applications </td></tr></table><table width="100%"><tr><td> Compiling and Loading </td></tr></table><table width="100%"><tr><td> The Kernel Symbol Table </td></tr></table><table width="100%"><tr><td> Preliminaries </td></tr></table><table width="100%"><tr><td> Initialization and Shutdown </td></tr></table><table width="100%"><tr><td> Module Parameters </td></tr></table><table width="100%"><tr><td> Doing It in User Space </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 3. Char Driven </td></tr></table><table width="100%"><tr><td> The Design of scull </td></tr></table><table width="100%"><tr><td> Major and Minor Numbers </td></tr></table><table width="100%"><tr><td> Some Important Data Structures </td></tr></table><table width="100%"><tr><td> Char Device Registration </td></tr></table><table width="100%"><tr><td> open and release </td></tr></table><table width="100%"><tr><td> scull's Memory Usage </td></tr></table><table width="100%"><tr><td> read and write </td></tr></table><table width="100%"><tr><td> Playing with the New Devices </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 4. Debugging Techniques </td></tr></table><table width="100%"><tr><td> Debugging Support in the Kernel </td></tr></table><table width="100%"><tr><td> Debugging by Printing </td></tr></table><table width="100%"><tr><td> Debugging by Querying </td></tr></table><table width="100%"><tr><td> Debugging by Watching </td></tr></table><table width="100%"><tr><td> Debugging System Faults </td></tr></table><table width="100%"><tr><td> Debuggers and Related Tools </td></tr></table><table width="100%"><tr><td> 5. Concurrency and Race Conditions </td></tr></table><table width="100%"><tr><td> Pitfalls in scull </td></tr></table><table width="100%"><tr><td> Concurrency and Its Management </td></tr></table><table width="100%"><tr><td> Semaphores and Mutexes </td></tr></table><table width="100%"><tr><td> Completions </td></tr></table><table width="100%"><tr><td> Spinlocks </td></tr></table><table width="100%"><tr><td> Locking Traps </td></tr></table><table width="100%"><tr><td> Alternatives to Locking </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 6. Advanced Char Driver Operations </td></tr></table><table width="100%"><tr><td> ioctl </td></tr></table><table width="100%"><tr><td> Blocking I/O </td></tr></table><table width="100%"><tr><td> poll and select </td></tr></table><table width="100%"><tr><td> Asynchronous Notification </td></tr></table><table width="100%"><tr><td> Seeking a Device </td></tr></table><table width="100%"><tr><td> Access Control on a Device File </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 7. Time, Delays, and Deferred Work </td></tr></table><table width="100%"><tr><td> Measuring Time Lapses </td></tr></table><table width="100%"><tr><td> Knowing the Current Time </td></tr></table><table width="100%"><tr><td> Delaying Execution </td></tr></table><table width="100%"><tr><td> Kernel Timers </td></tr></table><table width="100%"><tr><td> Tasklets </td></tr></table><table width="100%"><tr><td> Workqueues </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 8. Allocating Memory </td></tr></table><table width="100%"><tr><td> The Real Story of kmalloc </td></tr></table><table width="100%"><tr><td> Lookaside Caches </td></tr></table><table width="100%"><tr><td> get_free_page and Friends </td></tr></table><table width="100%"><tr><td> vmalloc and Friends </td></tr></table><table width="100%"><tr><td> Per-CPU Variables </td></tr></table><table width="100%"><tr><td> Obtaining Large Buffers </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 9. Communicating with Hardware </td></tr></table><table width="100%"><tr><td> I/O Ports and I/O Memory </td></tr></table><table width="100%"><tr><td> Using I/O Ports </td></tr></table><table width="100%"><tr><td> An I/O Port Example </td></tr></table><table width="100%"><tr><td> Using I/O Memory </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 10. Interrupt Handling </td></tr></table><table width="100%"><tr><td> Preparing the Parallel Port </td></tr></table><table width="100%"><tr><td> Installing an Interrupt Handler </td></tr></table><table width="100%"><tr><td> Implementing a Handler </td></tr></table><table width="100%"><tr><td> Top and Bottom HaNes </td></tr></table><table width="100%"><tr><td> Interrupt Sharing </td></tr></table><table width="100%"><tr><td> Interrupt-Driven I/O </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 11. Data Types in the Kernel </td></tr></table><table width="100%"><tr><td> Use of Standard C Types </td></tr></table><table width="100%"><tr><td> Assigning an Explicit Size to Data Items </td></tr></table><table width="100%"><tr><td> Interface-Specific Types </td></tr></table><table width="100%"><tr><td> Other Portability Issues </td></tr></table><table width="100%"><tr><td> Linked Lists </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 12. PCI Drivers </td></tr></table><table width="100%"><tr><td> The PCI Interface </td></tr></table><table width="100%"><tr><td> A Look Back: ISA </td></tr></table><table width="100%"><tr><td> PC/104 and PC/104+ </td></tr></table><table width="100%"><tr><td> Other PC Buses </td></tr></table><table width="100%"><tr><td> SBus </td></tr></table><table width="100%"><tr><td> NuBus </td></tr></table><table width="100%"><tr><td> External Buses </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 13. USB Drivers </td></tr></table><table width="100%"><tr><td> USB Device Basics </td></tr></table><table width="100%"><tr><td> USB and Sysfs </td></tr></table><table width="100%"><tr><td> USB Urbs </td></tr></table><table width="100%"><tr><td> Writing a USB Driver </td></tr></table><table width="100%"><tr><td> USB Transfers Without Urbs </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 14. The Linux Device Model </td></tr></table><table width="100%"><tr><td> Kobjects, Ksets, and Subsystems </td></tr></table><table width="100%"><tr><td> Low-Level Sysfs Operations </td></tr></table><table width="100%"><tr><td> Hotplug Event Generation </td></tr></table><table width="100%"><tr><td> Buses, Devices, and Drivers </td></tr></table><table width="100%"><tr><td> Classes </td></tr></table><table width="100%"><tr><td> Putting It All Together </td></tr></table><table width="100%"><tr><td> Hotplug </td></tr></table><table width="100%"><tr><td> Dealing with Firmware </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 15. Memory Mapping and DMA </td></tr></table><table width="100%"><tr><td> Memory Management in Linux </td></tr></table><table width="100%"><tr><td> The mmap Device Operation </td></tr></table><table width="100%"><tr><td> Performing Direct I/0 </td></tr></table><table width="100%"><tr><td> Direct Memory Access </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 16. Block Drivers </td></tr></table><table width="100%"><tr><td> Registration </td></tr></table><table width="100%"><tr><td> The Block Device Operations </td></tr></table><table width="100%"><tr><td> Request Processing </td></tr></table><table width="100%"><tr><td> Some Other Details </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 17. Network Drivers </td></tr></table><table width="100%"><tr><td> How snull Is Designed </td></tr></table><table width="100%"><tr><td> Connecting to the Kernel </td></tr></table><table width="100%"><tr><td> The net_device Structure in Detail </td></tr></table><table width="100%"><tr><td> Opening and Closing </td></tr></table><table width="100%"><tr><td> Packet Transmission </td></tr></table><table width="100%"><tr><td> Packet Reception </td></tr></table><table width="100%"><tr><td> The Interrupt Handler </td></tr></table><table width="100%"><tr><td> Receive Interrupt Mitigation </td></tr></table><table width="100%"><tr><td> Changes in Link State </td></tr></table><table width="100%"><tr><td> The Socket Buffers </td></tr></table><table width="100%"><tr><td> MAC Address Resolution </td></tr></table><table width="100%"><tr><td> Custom ioctl Commands </td></tr></table><table width="100%"><tr><td> Statistical Information </td></tr></table><table width="100%"><tr><td> Multicast </td></tr></table><table width="100%"><tr><td> A Few Other Details </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> 18. TTY Drivers </td></tr></table><table width="100%"><tr><td> A Small TTY Driver </td></tr></table><table width="100%"><tr><td> tty_driver Function Pointers </td></tr></table><table width="100%"><tr><td> TTY Line Settings </td></tr></table><table width="100%"><tr><td> ioctls </td></tr></table><table width="100%"><tr><td> proc and sysfs Handling of TTY Devices </td></tr></table><table width="100%"><tr><td> The try_driver Structure in Detail </td></tr></table><table width="100%"><tr><td> The tty_operations Structure in Detail </td></tr></table><table width="100%"><tr><td> The tty_struct Structure in Detail </td></tr></table><table width="100%"><tr><td> Quick Reference </td></tr></table><table width="100%"><tr><td> Bibliography </td></tr></table><table width="100%"><tr><td> Index </td></tr></table></font>
<table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr bgcolor="#CC0000"> <td height="1"></td> </tr> <tr> <td height="5"></td> </tr> <tr> <td> ·<a href='javascript:moreup("Catalog.asp?IDD=25526&type=1")'>目录</a>·<a href='javascript:moreup("Catalog.asp?IDD=25526&type=2")'>内容简介</a>·<a href='javascript:moreup("Catalog.asp?IDD=25526&type=5")'>作译者</a>·<a href='javascript:moreup("Catalog.asp?IDD=25526&type=6")'>前言</a> </td> </tr></table></BODY></H