Linux设备驱动开发:探索内核与实战指南

需积分: 9 0 下载量 186 浏览量 更新于2024-08-01 收藏 646KB PDF 举报
"Linux设备驱动开发" 《Linux设备驱动》这本书,表面上是一本关于为Linux系统编写设备驱动的指南。随着新硬件产品的不断涌现,确保这些设备与Linux的兼容性显得尤为重要。本书旨在使Linux内核的工作原理和适应性对更广泛的开发者群体开放。这是该书的第三版,自首次出版以来,Linux内核发生了显著变化,作者们努力使文本与之同步更新。这一版全面覆盖了2.6.10内核,同时决定不再讨论与早期内核版本的向后兼容性,因为2.4到2.6的变化太大,而2.4接口在第二版中已有充分的文档记录。 此新版包含大量与2.6内核相关的新增内容。关于锁和并发性的讨论被扩展并独立成章。全新的Linux设备模型,这是2.6内核的新特性,被详细讲解。书中新增了USB总线和串行驱动子系统的章节,PCI章节也得到了增强。尽管其余部分的组织结构类似前几版,但每个章节都经过了彻底的更新。 在编程之前,本章(第2章:构建和运行模块)介绍了关于模块和内核编程的所有基本概念。通过构建和运行一个完整的(尽管相对无用)模块,以及查看所有模块共享的基本代码,来奠定模块化驱动开发的基础。为了避免一次性引入太多概念,本章仅关注模块,而不涉及特定设备类别的细节。所有在此介绍的内核元素(函数、变量、头文件和宏)都在本章末尾的参考部分进行了解释。 从本章开始,我们将展示示例模块,以演示编程概念(所有示例在O'Reilly的FTP站点上提供)。构建、加载和修改这些示例是提高对驱动工作原理和与内核交互理解的好方法。 为了开始测试,你需要设置你的测试系统。从这一章起,我们将提供示例模块,用于演示编程概念(所有这些示例都可以在第1章中解释的O'Reilly FTP站点上找到)。构建、加载和修改这些示例是加深对驱动器如何工作以及如何与内核交互理解的有效途径。 在深入设备驱动开发之前,掌握模块的基本构建和运行至关重要。这包括了解如何编译模块、如何使用insmod或modprobe将其加载到内核中,以及如何通过rmmod卸载模块。此外,理解如何调试模块和处理内核模块错误也是必不可少的技能。 《Linux设备驱动》第三版是一本面向希望理解和开发Linux内核驱动程序的读者的宝贵资源,它不仅涵盖了设备驱动的基本知识,还深入探讨了内核的内部运作机制,使得Linux系统对于开发者更加开放和可定制。通过阅读和实践本书中的内容,开发者能够提升自己的Linux驱动开发能力,为各种类型的设备创建高效且稳定的驱动程序。
2017-09-20 上传
Linux Device Driver (3edtion)原版 1. An Introduction to Device Drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 The Role of the Device Driver 2 Splitting the Kernel 4 Classes of Devices and Modules 5 Security Issues 8 Version Numbering 10 License Terms 11 Joining the Kernel Development Community 12 Overview of the Book 12 2. Building and Running Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Setting Up Your Test System 15 The Hello World Module 16 Kernel Modules Versus Applications 18 Compiling and Loading 22 The Kernel Symbol Table 28 Preliminaries 30 Initialization and Shutdown 31 Module Parameters 35 Doing It in User Space 37 Quick Reference 39 3. Char Drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 The Design of scull 42 Major and Minor Numbers 43 Some Important Data Structures 49 ,ldr3TOC.fm.4587 Page v Thursday, January 20, 2005 9:30 AMvi | Table of Contents Char Device Registration 55 open and release 58 scull’s Memory Usage 60 read and write 63 Playing with the New Devices 70 Quick Reference 70 4. Debugging Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Debugging Support in the Kernel 73 Debugging by Printing 75 Debugging by Querying 82 Debugging by Watching 91 Debugging System Faults 93 Debuggers and Related Tools 99 5. Concurrency and Race Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Pitfalls in scull 107 Concurrency and Its Management 107 Semaphores and Mutexes 109 Completions 114 Spinlocks 116 Locking Traps 121 Alternatives to Locking 123 Quick Reference 130 6. Advanced Char Driver Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 ioctl 135 Blocking I/O 147 poll and select 163 Asynchronous Notification 169 Seeking a Device 171 Access Control on a Device File 173 Quick Reference 179