具体描述
Device drivers literally drive everything you're interested in--disks, monitors, keyboards, modems--everything outside the computer chip and memory. And writing device drivers is one of the few areas of programming for the Linux operating system that calls for unique, Linux-specific knowledge. For years now, programmers have relied on the classic Linux Device Drivers from O'Reilly to master this critical subject. Now in its third edition, this bestselling guide provides all the information you'll need to write drivers for a wide range of devices. Over the years the book has helped countless programmers learn: * how to support computer peripherals under the Linux operating system * how to develop and write software for new hardware under Linux * the basics of Linux operation even if they are not expecting to write a driver The new edition of Linux Device Drivers is better than ever. The book covers all the significant changes to Version 2.6 of the Linux kernel, which simplifies many activities, and contains subtle new features that can make a driver both more efficient and more flexible. Readers will find new chapters on important types of drivers not covered previously, such as consoles, USB drivers, and more. Best of all, you don't have to be a kernel hacker to understand and enjoy this book. All you need is an understanding of the C programming language and some background in Unix system calls. And for maximum ease-of-use, the book uses full-featured examples that you can compile and run without special hardware. Today Linux holds fast as the most rapidly growing segment of the computer market and continues to win over enthusiastic adherents in many application areas. With this increasing support, Linux is now absolutely mainstream, and viewed as a solid platform for embedded systems. If you're writing device drivers, you'll want this book. In fact, you'll wonder how drivers are ever written without it.
作者简介
Jonathan Corbet got his first look at the BSD Unix source back in 1981, when an instructor at the University of Colorado let him "fix" the paging algorithm. He has been digging around inside every system he could get his hands on ever since, working on drivers for VAX, Sun, Ardent, and x86 systems on the way. He got his first Linux system in 1993, and has never looked back. Mr. Corbet is currently the co-founder and executive editor of Linux Weekly News (http://LWN.net/); he lives in Boulder, Colorado with his wife and two children.
Alessandro installed Linux 0.99.14 soon after getting his degree as electronic engineer. He then received a Ph.D. in computer science at the University of Pavia despite his aversion toward modern technology. He left the University after getting his Ph.D. because he didn't want to write articles. He now works as a free lancer writing device drivers and, um...articles. He used to be a young hacker before his babies were born; he's now an old advocate of Free Software who developed a bias for non-PC computer platforms.
Greg Kroah-Hartman has been writing Linux kernel drivers since 1999, and is currently the maintainer for the USB, PCI, I2C, driver core, and sysfs kernel subsystems. He is also the maintainer of the udev and hotplug userspace programs, as well as being a Gentoo kernel maintainer, ensuring that his email inbox is never empty. He is a contributing editor to Linux Journal Magazine, and works for IBM's Linux Technology Center, doing various Linux kernel related tasks.
目录信息
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
· · · · · · (收起)
读后感
手头有两本,一本原版的,一本中译的。阅读原版的冲动屡屡受到my pool English的打击,所以特别感谢热心人整出来的中译本,都是熟悉的方块字,翻起顺手多了,呵呵。鄙人期间花了不少精力,在研究其中式表达想要说明的东东,但是这样也好,多花点时间没坏处,有助于深刻理解。这...
本书是针对那些想在Linux操作系统下支持计算机外设或者是想在Linux下开发并运行新硬件的人而写的。Linux是UNIX市场中份额增长最快的操作系统,在许多应用领域中赢得了众多热心的追随者。本书展示了迄今为止流传于口头上的或隐含在源代码评注背后的信息,并引导您为众多的设备编...
该书对字符设备驱动和linux内核同步的介绍还是很详细的。虽然其中关于usb和pci的介绍有点笼统和不够清楚,不过也可以使读者有一定的了解。另外本书还介绍了网络设备驱动,块设备和TTY驱动,覆盖面还是挺广的。貌似驱动程序的范式就是注册设备,然后实现xxxx_operations的成员。...
ldd3被堪称设备驱动学习金典的确不假,但并不是每个新手都能吭下来的。新人学习还是推荐实战性强点的书,宋宝华老师的驱动开发或者精通Linux设备驱动程序开发都可以,这三本书我都稍微翻过...对于有点驱动开发积累的人,看看这本书我觉得还是蛮好的,很多点都已经点到,知道了...
用户评价
这本书的出版,简直是Linux内核开发者和嵌入式工程师的福音!我拿到这本书后,迫不及待地翻阅,首先吸引我的是它详实的内容和清晰的结构。从基础的字符设备驱动编写,到复杂的块设备和网络设备,这本书几乎涵盖了所有常见的驱动开发场景。我尤其欣赏作者在讲解每个驱动类型时,都提供了大量的示例代码,并且对代码的每一个细节都进行了深入的剖析,这对于我这种需要实战上手的人来说,简直是太重要了。很多时候,在阅读其他资料时,往往只能得到概念性的介绍,而这本书则将理论与实践完美地结合在了一起,让我能够真正理解驱动是如何工作的,而不是仅仅停留在表面。
对于初学者来说,Linux设备驱动的开发无疑是一道难以逾越的门槛。各种陌生的概念、复杂的API,很容易让人望而却步。然而,《Linux Device Drivers》这本书却巧妙地解决了这个问题。作者以非常友好的方式,从最简单的字符设备入手,逐步引导读者进入驱动开发的世界。书中的每一个例子都经过精心设计,旨在帮助读者理解核心概念,而不是简单地堆砌代码。我最喜欢的是书中关于调试技巧的章节,这对于减少开发过程中的挫败感起到了至关重要的作用。它教会我如何利用内核提供的各种工具来定位和解决问题,这让我在实际项目中受益匪浅。
在我看来,《Linux Device Drivers》这本书的价值在于其系统性和前瞻性。它不仅涵盖了当前Linux内核中驱动开发的最新技术和最佳实践,更重要的是,它为读者提供了一个理解内核演进方向和未来趋势的窗口。作者对内核中各种新特性和模块的介绍,让我对驱动开发的未来充满了期待。书中对于性能优化和安全性方面的讨论,也为编写高质量的驱动提供了宝贵的指导。我还会反复阅读这本书,因为它就像一个不断更新的知识宝库,每次重读都能有新的体会和收获。
这本书绝对是Linux驱动开发领域的权威著作,其内容之丰富、讲解之深入,令我印象深刻。我特别欣赏书中对各种驱动模型的细致讲解,包括平台驱动、I2C驱动、SPI驱动等等,并且对这些模型的设计理念和应用场景都进行了深入的探讨。作者不仅讲解了如何编写驱动,更重要的是,他解释了为什么需要这样做,以及这样做的潜在影响。这对于我来说,不仅仅是学习了一门技术,更是理解了一种工程思想。书中关于内核API的介绍也十分全面,涵盖了几乎所有常用的驱动开发接口,让我不再需要费力地去查阅零散的文档。
作为一名在Linux驱动开发领域摸爬滚打多年的老兵,我一直都在寻找一本能够真正帮助我深入理解内核机制的书籍。终于,《Linux Device Drivers》这本书的出现,让我眼前一亮。它的内容深度远超我的预期,不仅仅是教你如何编写一个驱动,更是带你理解驱动背后涉及到的内核子系统,例如内存管理、调度机制、中断处理等等。作者的讲解逻辑非常严谨,循序渐进,即使是一些非常复杂的概念,也能被他阐述得通俗易懂。我特别喜欢书中关于同步机制和并发控制的章节,这对于编写健壮、可靠的驱动至关重要。这本书让我对Linux内核的认识达到了一个新的高度。
和ULD,LKD并列为学习内核的三大法宝。书的质量不解释。但是初学者看的话,可能摸不着头(不排除有神人一遍OK),我觉得可以先看看LKD,然后结合宋宝华老师那本驱动书籍(我称之Cn_LDD)来看。比较好消化一点。
在我读过的英文textbook里面算是比较烂的一本了,没有一个清晰的线索。不知道为什么被奉为经典。
https://lwn.net/Kernel/LDD3/
在我读过的英文textbook里面算是比较烂的一本了,没有一个清晰的线索。不知道为什么被奉为经典。
经典ldd, 驱动开发必备no.1