📄 index.html
字号:
<html xmlns:cf="http://docbook.sourceforge.net/xmlns/chunkfast/1.0"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>Linux 设备驱动 Edition 3</title><link rel="stylesheet" href="docbook.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.69.0"><link rel="start" href="index.html" title="Linux 设备驱动 Edition 3"><link rel="next" href="ch01.html" title="第 1 章 第一章 设备驱动简介"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linux 设备驱动 Edition 3</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch01.html">下一页</a></td></tr></table><hr></div><div class="book" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="id344748"></a>Linux 设备驱动 Edition 3</h1></div><div><div class="author"><h3 class="author"><span class="firstname">By Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman</span></h3></div></div><div><p class="releaseinfo"> </p><p>由 quickwhale 翻译的简体中文版本 V0.0.1 </p><p class="releaseinfo"></p><p> 遵循原版的版权声明. 还在完善中. 欢迎任何意见, 请给我邮件. 请发信至 quickwhale 的邮箱 <code class="email"><<a href="mailto:quickwhale@hotmail.com">quickwhale@hotmail.com</a>></code></p><p class="releaseinfo"></p></div><div><p class="copyright">版权 © 2005, 2001, 1998 O’Reilly Media, Inc. All rights reserved. </p></div><div><div class="legalnotice"><a name="id352029"></a><p>Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (safari.oreilly.com). For more information, contact our corporate/insti-tutional sales department: (800) 998-9938 or corporate@oreilly.com. </p><p>This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.0 License. To view a copy of this license, visit <a href="http://creativecommons.org/licenses/by-sa/2.0/" target="_top">http://creativecommons.org/licenses/by-sa/2.0/</a>or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. </p></div></div></div><hr></div><div class="dedication" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title"><a name="id406180"></a>感谢</h2></div></div></div><p>感谢本书原版的作者 Jonathan Corbet, Alessandro Rubini 和 Greg Kroah-Hartman</p><p>感谢我的家人 爸爸<sup>2</sup>, 妈妈<sup>2</sup>, PIGY<sub>nuonuo</sub> </p></div><div class="toc"><p><b>目录</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. 第一章 设备驱动简介</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch01.html#TheRoleoftheDeviceDriver.sect1">1.1. 驱动程序的角色</a></span></dt><dt><span class="sect1"><a href="ch01s02.html">1.2. 划分内核</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch01s02.html#LoadableModules.sect2">1.2.1. 可加载模块</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch01s03.html">1.3. 设备和模块的分类</a></span></dt><dt><span class="sect1"><a href="ch01s04.html">1.4. 安全问题</a></span></dt><dt><span class="sect1"><a href="ch01s05.html">1.5. 版本编号</a></span></dt><dt><span class="sect1"><a href="ch01s06.html">1.6. 版权条款</a></span></dt><dt><span class="sect1"><a href="ch01s07.html">1.7. 加入内核开发社团</a></span></dt><dt><span class="sect1"><a href="ch01s08.html">1.8. 本书的内容</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch02.html">2. 建立和运行模块</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch02.html#SettingUpYourTestSystem.sect1">2.1. 设置你的测试系统</a></span></dt><dt><span class="sect1"><a href="ch02s02.html">2.2. Hello World 模块</a></span></dt><dt><span class="sect1"><a href="ch02s03.html">2.3. 内核模块相比于应用程序</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s03.html#UserSpaceandKernelSpace.sect2">2.3.1. 用户空间和内核空间</a></span></dt><dt><span class="sect2"><a href="ch02s03.html#ConcurrencyintheKernel.sect2">2.3.2. 内核的并发</a></span></dt><dt><span class="sect2"><a href="ch02s03.html#TheCurrentProcess.sect2">2.3.3. 当前进程</a></span></dt><dt><span class="sect2"><a href="ch02s03.html#AFewOtherDetails.sect2">2.3.4. 几个别的细节</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s04.html">2.4. 编译和加载</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s04.html#CompilingModules.sect2">2.4.1. 编译模块</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#LoadingandUnloadingModules.sect2">2.4.2. 加载和卸载模块</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#VersionDependency.sect2">2.4.3. 版本依赖</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#PlatformDependency.sect2">2.4.4. 平台依赖性</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s05.html">2.5. 内核符号表</a></span></dt><dt><span class="sect1"><a href="ch02s06.html">2.6. 预备知识</a></span></dt><dt><span class="sect1"><a href="ch02s07.html">2.7. 初始化和关停</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s07.html#TheCleanupFunction.sect2">2.7.1. 清理函数</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#ErrorHandlingDuringInitialization.sect2">2.7.2. 初始化中的错误处理</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#ModuleLoadingRaces.sect2">2.7.3. 模块加载竞争</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s08.html">2.8. 模块参数</a></span></dt><dt><span class="sect1"><a href="ch02s09.html">2.9. 在用户空间做</a></span></dt><dt><span class="sect1"><a href="ch02s10.html">2.10. 快速参考</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch03.html">3. 字符驱动</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch03.html#TheDesignofscull.sect">3.1. scull 的设计</a></span></dt><dt><span class="sect1"><a href="ch03s02.html">3.2. 主次编号</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s02.html#TheInternalRepresentationofDeviceNumber.sect">3.2.1. 设备编号的内部表示</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#AllocatingandFreeingDeviceNumbers.sect">3.2.2. 分配和释放设备编号</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#DynamicAllocaionofMajorNumbers.sect">3.2.3. 主编号的动态分配</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.html">3.3. 一些重要数据结构</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s03.html#FileOperation.sect">3.3.1. 文件操作</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#ThefileStructure.sect">3.3.2. 文件结构</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#TheinodeStructure.sect">3.3.3. inode 结构</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s04.html">3.4. 字符设备注册</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s04.html#DeviceRegistrationinscull.sect">3.4.1. scull 中的设备注册</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#TheOlderWay.sect">3.4.2. 老方法</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s05.html">3.5. open 和 release</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s05.html#TheopenMethod.sect">3.5.1. open 方法</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#ThereleaseMethod.sect">3.5.2. release 方法</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s06.html">3.6. scull 的内存使用</a></span></dt><dt><span class="sect1"><a href="ch03s07.html">3.7. 读和写</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s07.html#ThereadMethod.sect">3.7.1. read 方法</a></span></dt><dt><span class="sect2"><a href="ch03s07.html#ThewriteMethod.sect">3.7.2. write 方法</a></span></dt><dt><span class="sect2"><a href="ch03s07.html#readvandwritev.sect">3.7.3. readv 和 writev</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s08.html">3.8. 使用新设备</a></span></dt><dt><span class="sect1"><a href="ch03s09.html">3.9. 快速参考</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch04.html">4. 调试技术</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#DebuggingSupportintheKernel.sect">4.1. 内核中的调试支持</a></span></dt><dt><span class="sect1"><a href="ch04s02.html">4.2. 用打印调试</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s02.html#printk">4.2.1. printk</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#RedirectingConsoleMessages">4.2.2. 重定向控制台消息</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#HowMessageGetLogged">4.2.3. 消息是如何记录的</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#TurningtheMessagesOnandOff">4.2.4. 打开和关闭消息</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#RateLimiting">4.2.5. 速率限制</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#PrintingDeviceNumbers">4.2.6. 打印设备编号</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s03.html">4.3. 用查询来调试</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s03.html#UsingtheprocFilesystem">4.3.1. 使用 /proc 文件系统</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#TheioctlMethod.sect">4.3.2. ioctl 方法</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s04.html">4.4. 使用观察来调试</a></span></dt><dt><span class="sect1"><a href="ch04s05.html">4.5. 调试系统故障</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s05.html#OopsMessages.scet">4.5.1. oops 消息</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#SystemHange.sect">4.5.2. 系统挂起</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s06.html">4.6. 调试器和相关工具</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s06.html#Usinggdb.sect">4.6.1. 使用 gdb</a></span></dt><dt><span class="sect2"><a href="ch04s06.html#ThekdbKernelDebugger.sect">4.6.2. kdb 内核调试器</a></span></dt><dt><span class="sect2"><a href="ch04s06.html#ThekgdbPatches.sect">4.6.3. kgdb 补丁</a></span></dt><dt><span class="sect2"><a href="ch04s06.html#TheUserModeLinuxPort.sect">4.6.4. 用户模式 Linux 移植</a></span></dt><dt><span class="sect2"><a href="ch04s06.html#TheLinuxTraceToolkit.sect">4.6.5. Linux 追踪工具</a></span></dt><dt><span class="sect2"><a href="ch04s06.html#DynamicProbes.sect">4.6.6. 动态探针</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ch05.html">5. 并发和竞争情况</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch05.html#Pitfallsinscull.sect">5.1. scull 中的缺陷</a></span></dt><dt><span class="sect1"><a href="ch05s02.html">5.2. 并发和它的管理</a></span></dt><dt><span class="sect1"><a href="ch05s03.html">5.3. 旗标和互斥体</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch05s03.html#TheLinuxSemaphoreImplementation.sect">5.3.1. Linux 旗标实现</a></span></dt><dt><span class="sect2"><a href="ch05s03.html#UsingSemaphoresinscull.sect">5.3.2. 在 scull 中使用旗标</a></span></dt><dt><span class="sect2"><a href="ch05s03.html#ReaderWriterSemphores.sect">5.3.3. 读者/写者旗标</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch05s04.html">5.4. Completions 机制</a></span></dt><dt><span class="sect1"><a href="ch05s05.html">5.5. 自旋锁</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch05s05.html#IntroductiontotheSpinlockAPI.sect">5.5.1. 自旋锁 API 简介</a></span></dt><dt><span class="sect2"><a href="ch05s05.html#SpinlocksandAtomicContext.sect">5.5.2. 自旋锁和原子上下文</a></span></dt><dt><span class="sect2"><a href="ch05s05.html#TheSpinlockFunctions.sect">5.5.3. 自旋锁函数</a></span></dt><dt><span class="sect2"><a href="ch05s05.html#ReaderWriterSpinlocks.sect">5.5.4. 读者/写者自旋锁</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch05s06.html">5.6. 锁陷阱</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch05s06.html#AmbiguousRules.sect">5.6.1. 模糊的规则</a></span></dt><dt><span class="sect2"><a href="ch05s06.html#LockOrderingRules.sect">5.6.2. 加锁顺序规则</a></span></dt><dt><span class="sect2"><a href="ch05s06.html#FineVersusCoarseGrainedLocking.sect">5.6.3. 细 -粗- 粒度加锁</a></span></dt>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -