精通Linux设备驱动程序开发
0推荐 收藏
6.6K阅读
图灵程序设计丛书

精通Linux设备驱动程序开发

Sreekrishnan Venkateswaran (作者) 宋宝华 , 何昭然 , 史海滨 , 吴国成 (译者)
终止销售
  本书是Linux 设备驱动程序开发领域的权威著作。全书基于2.6 内核,不仅透彻讲解了基本概念和技术,更深入探讨了其他书没有涵盖或浅尝辄止的许多重要主题和关键难点,如PCMCIA、I2C 和USB 等外部总线
以及视频、音频、无线连网和闪存等驱动程序的开发,并讲解了相关的内核源码文件,给出了完整的开发实例。
  本书适合中高级Linux 开发人员阅读。

出版信息

  • 书  名精通Linux设备驱动程序开发
  • 系列书名图灵程序设计丛书
  • 执行编辑关于本书的内容有任何问题,请联系 傅志红
  • 出版日期2010-05-05
  • 书  号978-7-115-22167-4
  • 定  价89.00 元
  • 页  数484
  • 开  本16开
  • 出版状态终止销售
  • 原书名Essential Linux Device Drivers
  • 原书号978-0-13-239655-4

同系列书

  • JavaScript高级程序设计(第4版)

    [美]马特·弗里斯比(Matt Frisbie)   李松峰   译

    本书是JavaScript经典图书的新版。第4版涵盖ECMAScript 2019,全面、深入地介绍了Java...

  • HTTP权威指南

    David Gourley   Brian Totty   Marjorie Sayer   Sailu Reddy   Anshu Aggarwal   陈涓   赵振平   译

    本书是HTTP及其相关核心Web技术方面的权威著作,主要介绍了Web应用程序是如何工作的,核心的因特网协议如何...

  • JavaScript高级程序设计(第3版)

    Nicholas C.Zakas   李松峰   曹力   译

    本书是JavaScript超级畅销书的新版。ECMAScript 5 和HTML5在标准之争中双双胜出,使大量...

  • 计算机科学的基础

    Al Aho   Jeff Ullman   傅尔也   译

    本书全面而详细地阐述了计算机科学的理论基础,从抽象概念的机械化到各种数据模型的建立,用算法、数据抽象等核心思想...

  • Java技术手册(第6版)

    Benjamin J Evans   David Flanagan   安道   译

    通过学习本书,你将能够: 掌握最新的语言细节,包括Java 8的变化 使用基本的Java句法学习面向对...

目录

目录
第1章 引言    1
1.1 演进    1
1.2 GNU无版权    2
1.3 kernel.org    2
1.4 邮件列表和论坛    3
1.5 Linux发行版    3
1.6 查看源代码    4
1.7 编译内核    7
1.8 可加载的模块    8
1.9 整装待发    9
第2章 内核    11
2.1 启动过程    11
2.1.1 BIOS-provided physical RAM map    12
2.1.2 758MB LOWMEM available    14
2.1.3 Kernel command line: ro
root=/dev/hda1    14
2.1.4 Calibrating delay...1197.46BogoMIPS (lpj=2394935)    15
2.1.5 Checking HLT instruction    16
2.1.6 NET: Registered protocol family 2    17
2.1.7 Freeing initrd memory: 387k freed    17
2.1.8 io scheduler anticipatory registered (default)    18
2.1.9 Setting up standard PCI resources    18
2.1.10 EXT3-fs: mounted filesystem    19
2.1.11 INIT: version 2.85 booting    19
2.2 内核模式和用户模式    20
2.3 进程上下文和中断上下文    20
2.4 内核定时器    21
2.4.1 HZ和Jiffies    21
2.4.2 长延时    22
2.4.3 短延时    24
2.4.4 Pentium时间戳计数器    24
2.4.5 实时钟    25
2.5 内核中的并发    26
2.5.1 自旋锁和互斥体    26
2.5.2 原子操作    30
2.5.3 读—写锁    31
2.5.4 调试    32
2.6 proc文件系统    32
2.7 内存分配    33
2.8 查看源代码    34
第3章 内核组件    37
3.1 内核线程    37
3.1.1 创建内核线程    37
3.1.2 进程状态和等待队列    41
3.1.3 用户模式辅助程序    42
3.2 辅助接口    43
3.2.1 链表    44
3.2.2 散列链表    49
3.2.3 工作队列    49
3.2.4 通知链    51
3.2.5 完成接口    54
3.2.6 kthread辅助接口    56
3.2.7 错误处理助手    57
3.3 查看源代码    58
第4章 基本概念    61
4.1 设备和驱动程序介绍    61
4.2 中断处理    63
4.2.1 中断上下文    63
4.2.2 分配IRQ号    64
4.2.3 设备实例:导航杆    65
4.2.4 softirq和tasklet    68
4.3 Linux设备模型    71
4.3.1 udev    71
4.3.2 sysfs、kobject和设备类    73
4.3.3 热插拔和冷插拔    76
4.3.4 微码下载    76
4.3.5 模块自动加载    77
4.4 内存屏障    78
4.5 电源管理    79
4.6 查看源代码    79
第5章 字符设备驱动程序    81
5.1 字符设备驱动程序基础    81
5.2 设备实例:系统CMOS    82
5.2.1 驱动程序初始化    83
5.2.2 打开与释放    86
5.2.3 数据交换    88
5.2.4 查找    92
5.2.5 控制    94
5.3 检测数据可用性    95
5.3.1 轮询    95
5.3.2 Fasync    98
5.4 和并行端口交互    99
5.5 RTC子系统    108
5.6 伪字符驱动程序    109
5.7 混杂驱动程序    110
5.8 字符设备驱动程序警告    115
5.9 查看源代码    115
第6章 串行设备驱动程序    118
6.1 层次架构    119
6.2 UART驱动程序    121
6.2.1 设备实例:手机    122
6.2.2 RS-485    132
6.3 TTY驱动程序    132
6.4 线路规程    134
6.5 查看源代码    141
第7章 输入设备驱动程序    143
7.1 输入事件驱动程序    144
7.2 输入设备驱动程序    150
7.2.1 serio    150
7.2.2 键盘    150
7.2.3 鼠标    152
7.2.4 触摸控制器    157
7.2.5 加速度传感器    158
7.2.6 输出事件    158
7.3 调试    159
7.4 查看源代码    160
第8章 I2C协议    161
8.1 I2C/SMBus是什么    161
8.2 I2C核心    162
8.3 总线事务    164
8.4 设备实例:EEPROM    164
8.4.1 初始化    165
8.4.2 探测设备    167
8.4.3 检查适配器的功能    169
8.4.4 访问设备    169
8.4.5 其他函数    170
8.5 设备实例:实时时钟    171
8.6 i2c-dev    174
8.7 使用LM-Sensors监控硬件    174
8.8 SPI总线    174
8.9 1-Wire总线    176
8.10 调试    176
8.11 查看源代码    176
第9章 PCMCIA和CF    179
9.1 PCMCIA/CF是什么    179
9.2 Linux-PCMCIA子系统    181
9.3 主机控制器驱动程序    183
9.4 PCMCIA核心    183
9.5 驱动程序服务    183
9.6 客户驱动程序    183
9.6.1 数据结构    184
9.6.2 设备实例:PCMCIA卡    185
9.7 将零件组装在一起    188
9.8 PCMCIA存储    189
9.9 串行PCMCIA    189
9.10 调试    191
9.11 查看源代码    191
第10章 PCI    193
10.1 PCI系列    193
10.2 寻址和识别    195
10.3 访问PCI    198
10.3.1 配置区    198
10.3.2 I/O和内存    199
10.4 DMA    200
10.5 设备实例:以太网—调制解调器卡    203
10.5.1 初始化和探测    203
10.5.2 数据传输    209
10.6 调试    214
10.7 查看源代码    214
第11章 USB    216
11.1 USB体系架构    216
11.1.1 总线速度    218
11.1.2 主机控制器    218
11.1.3 传输模式    219
11.1.4 寻址    219
11.2 Linux-USB子系统    220
11.3 驱动程序的数据结构    221
11.3.1 usb_device结构体    221
11.3.2 URB    222
11.3.3 管道    223
11.3.4 描述符结构    223
11.4 枚举    225
11.5 设备实例:遥测卡    225
11.5.1 初始化和探测过程    226
11.5.2 卡寄存器的访问    230
11.5.3 数据传输    233
11.6 类驱动程序    236
11.6.1 大容量存储设备    236
11.6.2 USB-串行端口转换器    241
11.6.3 人机接口设备    243
11.6.4 蓝牙    243
11.7 小配件驱动程序    243
11.8 调试    244
11.9 查看源代码    245
第12章 视频驱动程序    247
12.1 显示架构    247
12.2 Linux视频子系统    249
12.3 显示参数    251
12.4 帧缓冲API    252
12.5 帧缓冲驱动程序    254
12.6 控制台驱动程序    265
12.6.1 设备实例:手机    266
12.6.2 启动logo    270
12.7 调试    270
12.8 查看源代码    271
第13章 音频驱动程序    273
13.1 音频架构    273
13.2 Linux声音子系统    275
13.3 设备实例:MP3播放器    277
13.3.1 驱动程序函数和结构体    278
13.3.2 ALSA编程    287
13.4 调试    288
13.5 查看源代码    289
第14章 块设备驱动程序    291
14.1 存储技术    291
14.2 Linux块I/O层    295
14.3 I/O调度器    295
14.4 块驱动程序数据结构和方法    296
14.5 设备实例:简单存储控制器    298
14.5.1 初始化    299
14.5.2 块设备操作    301
14.5.3 磁盘访问    302
14.6 前沿内容    304
14.7 调试    306
14.8 查看源代码    306
第15章 网络接口卡    308
15.1 驱动程序数据结构    308
15.1.1 套接字缓冲区    309
15.1.2 网络设备接口    310
15.1.3 激活    311
15.1.4 数据传输    311
15.1.5 看门狗    311
15.1.6 统计    312
15.1.7 配置    313
15.1.8 总线相关内容    314
15.2 与协议层会话    314
15.2.1 接收路径    314
15.2.2 传输路径    315
15.2.3 流量控制    315
15.3 缓冲区管理和并发控制    315
15.4 设备实例:以太网NIC    316
15.5 ISA网络驱动程序    321
15.6 ATM    321
15.7 网络吞吐量    322
15.7.1 驱动程序性能    322
15.7.2 协议性能    323
15.8 查看源代码    324
第16章 Linux无线设备驱动    326
16.1 蓝牙    327
16.1.1 BlueZ    328
16.1.2 设备实例:CF卡    329
16.1.3 设备实例:USB适配器    330
16.1.4 RFCOMM    331
16.1.5 网络    332
16.1.6 HID    334
16.1.7 音频    334
16.1.8 调试    334
16.1.9 关于源代码    334
16.2 红外    335
16.2.1 Linux-IrDA    335
16.2.2 设备实例:超级I/O芯片    337
16.2.3 设备实例:IR软件狗    338
16.2.4 IrCOMM    340
16.2.5 联网    340
16.2.6 IrDA套接字    341
16.2.7 LIRC    341
16.2.8 关于源代码    342
16.3 WiFi    343
16.3.1 配置    343
16.3.2 设备驱动程序    346
16.3.3 关于源代码    347
16.4 蜂窝网络    347
16.4.1 GPRS    347
16.4.2 CDMA    349
16.5 当前趋势    350
第17章 存储技术设备    352
17.1 什么是闪存    352
17.2 Linux-MTD子系统    353
17.3 映射驱动程序    353
17.4 NOR芯片驱动程序    358
17.5 NAND芯片驱动程序    359
17.6 用户模块    361
17.6.1 块设备模拟    361
17.6.2 字符设备模拟    361
17.6.3 JFFS2    362
17.6.4 YAFFS2    363
17.7 MTD工具    363
17.8 配置MTD    363
17.9 XIP    364
17.10 FWH    364
17.11 调试    367
17.12 查看源代码    367
第18章 嵌入式Linux    369
18.1 挑战    369
18.2 元器件选择    370
18.3 工具链    371
18.4 嵌入式引导装入程序    372
18.5 内存布局    374
18.6 内核移植    375
18.7 嵌入式驱动程序    376
18.7.1 闪存    377
18.7.2 UART    377
18.7.3 按钮和滚轮    378
18.7.4 PCMCIA/CF    378
18.7.5 SD/MMC    378
18.7.6 USB    378
18.7.7 RTC    378
18.7.8 音频    378
18.7.9 触摸屏    379
18.7.10 视频    379
18.7.11 CPLD/FPGA    379
18.7.12 连接性    379
18.7.13 专用领域电子器件    380
18.7.14 更多驱动程序    380
18.8 根文件系统    380
18.8.1 NFS挂载的根文件系统    381
18.8.2 紧凑型中间件    382
18.9 测试基础设施    383
18.10 调试    383
18.10.1 电路板返工    384
18.10.2 调试器    385
第19章 用户空间的驱动程序    386
19.1 进程调度和响应时间    387
19.1.1 原先的调度器    387
19.1.2 O(1)调度器    387
19.1.3 CFS    388
19.1.4 响应时间    388
19.2 访问I/O区域    390
19.3 访问内存区域    393
19.4 用户模式SCSI    395
19.5 用户模式USB    397
19.6 用户模式I2C    400
19.7 UIO    401
19.8 查看源代码    402
第20章 其他设备和驱动程序    403
20.1 ECC报告    403
20.2 频率调整    407
20.3 嵌入式控制器    408
20.4 ACPI    408
20.5 ISA与MCA    410
20.6 火线    410
20.7 智能输入/输出    411
20.8 业余无线电    411
20.9 VoIP    411
20.10 高速互联    412
20.10.1 InfiniBand    413
20.10.2 RapidIO    413
20.10.3 光纤通道    413
20.10.4 iSCSI    413
第21章 调试设备驱动程序    414
21.1 kdb    414
21.1.1 进入调试器    415
21.1.2 kdb    415
21.1.3 kgdb    417
21.1.4 gdb    420
21.1.5 JTAG调试器    421
21.1.6 下载    423
21.2 内核探测器    423
21.2.1 kprobe    423
21.2.2 jprobe    427
21.2.3 返回探针    429
21.2.4 局限性    431
21.2.5 查看源代码    431
21.3 kexec与kdump    431
21.3.1 kexec    432
21.3.2 kdump与kexec协同工作    432
21.3.3 kdump    433
21.3.4 查看源代码    437
21.4 性能剖析    437
21.4.1 利用OProfile剖析内核性能    438
21.4.2 利用gprof剖析应用程序性能    440
21.5 跟踪    441
21.6 LTP    444
21.7 UML    444
21.8 诊断工具    444
21.9 内核修改配置选项    444
21.10 测试设备    445
第22章 维护与发布    446
22.1 代码风格    446
22.2 修改标记    446
22.3 版本控制    447
22.4 一致性检查    447
22.5 构建脚本    448
22.6 可移植代码    450
第23章 结束语    451
23.1 流程一览表    451
23.2 下一步该做什么    452
附录A Linux汇编    453
附录B Linux与BIOS    457
附录C seq文件    461

相关文章

  • 黄志斌 2推荐

    通过 VGA 接口连接显示器时分辨率不正确

    我的一台 PC 机通过 VGA 接口连接一台微软之星 23.8 英寸显示器,该显示器的分辨率为 1920x1080。 在 Arch Linux 中通过“设置 → 显示”选择分辨率时,发现最大只有 1024x768。 (以前使用 Lenovo 笔记本电脑通过 HDMI 接口连接这…...

  • 黄志斌 2推荐

    Arch Linux 安装 TL-WN821N v5 USB 无线网卡

    ![][1] ![][2] 上面的是2014年1月在淘宝买的,58元 下面的是2020年6月在京东买的,57元 以前买过一个 TP-LINK TL-WN821N USB 无线网卡,用在安装 Arch Linux 的台式机上。即插即用,相关信息如下: $ lsmod …...

暂无评论!