



本书讲解了Linux设备驱动开发的基础知识以及所用到的开发环境。全书分为17章,内容涵盖了各种Linux子系统、内存管理、RTC、IIO和IRQ管理等,还讲解了DMA和部分设备驱动程序的使用方法。在学完本书之后,读者将掌握Linux设备驱动开发过程中涉及的各种概念,并可以从零开始为嵌入式设备编写驱动程序。 阅读本书需要具备基本的C语言编程能力,且熟悉Linux基本命令。
目录:
第 1篇 Linux内核开发基础
第 1章 内核开发简介 3
1.1 设置开发环境 3
1.2 配置和构建Linux内核 10
第 2章 Linux内核模块的基本概念 17
2.1 模块概念的介绍 17
2.2 构建Linux内核模块 21
2.3 处理模块参数 28
2.4 处理符号导出和模块依赖 30
2.5 学习Linux内核编程技巧 34
2.6 总结 40
第3章 处理内核的核心辅助函数 41
3.1 Linux内核加锁机制和共享资源 41
3.2 处理内核等待、睡眠和延迟机制 50
3.3 深入理解Linux内核时间管理 55
3.4 实现工作延迟机制 77
3.5 内核中断处理 93
3.6 总结 109
第4章 编写字符设备驱动程序 110
4.1 主设备号和次设备号的概念 110
4.2 字符设备数据结构介绍 111
4.3 创建设备节点 115
4.4 实现文件操作 119
4.5 总结 135
第 2篇 Linux内核平台抽象和设备驱动程序
第5章 理解和利用设备树 139
5.1 设备树机制的基本概念 139
5.2 如何表示和寻址设备 151
5.3 处理资源 155
5.4 总结 162
第6章 设备、驱动程序和平台抽象简介 163
6.1 Linux内核平台抽象和数据结构 163
6.2 设备与驱动程序匹配机制详解 173
6.3 总结 176
第7章 平台设备和驱动程序的概念 177
7.1 Linux内核中的平台核心抽象 178
7.2 处理平台设备 180
7.3 平台驱动程序抽象和架构 188
7.4 从零开始编写平台驱动程序 193
7.5 总结 198
第8章 编写I2C设备驱动程序 199
8.1 Linux内核中的I2C框架抽象 200
8.2 I2C设备驱动程序抽象和架构 208
8.3 如何避免编写I2C设备驱动程序 213
8.4 总结 216
第9章 编写SPI设备驱动程序 217
9.1 Linux内核中的SPI框架抽象 218
9.2 SPI设备驱动程序抽象和架构 231
9.3 如何避免编写SPI设备驱动程序 237
9.4 总结 242
第3篇 充分发挥硬件的潜力
第 10章 深入理解Linux内核内存分配 245
10.1 Linux内核内存相关术语简介 245
10.2 揭开地址转换和MMU的神秘面纱 255
10.3 内存分配机制及其API 261
10.4 使用I/O内存与硬件通信 274
10.5 内存(重)映射 278
10.6 总结 286
第 11章 实现DMA支持 287
11.1 设置DMA映射 288
11.2 完成(completion)的概念 295
11.3 DMA引擎API 296
11.4 综合实例——单缓冲区的DMA映射 310
11.5 关于循环DMA的说明 317
11.6 了解DMA和设备树绑定 321
11.7 总结 322
第 12章 内存访问抽象化——Regmap API简介:寄存器映射抽象化 323
12.1 初识Regmap 324
12.2 Regmap初始化 329
12.3 使用Regmap寄存器访问函数 330
12.4 将所有内容整合在一起—基于Regmap的SPI设备驱动程序示例 334
12.5 从用户空间利用Regmap 337
12.6 总结 340
第 13章 揭秘内核IRQ框架 341
13.1 中断的简要介绍 341
13.2 理解中断控制器和中断多路复用 342
13.3 深入研究高级外设IRQ管理 351
13.4 揭秘per-CPU中断 355
13.5 总结 359
第 14章 LDM简介 360
14.1 LDM数据结构简介 360
14.2 深入理解LDM 371
14.3 sysfs中的设备模型概述 388
14.4 总结 395
第4篇 嵌入式领域内的多种内核子系统
第 15章 深入了解IIO框架 399
15.1 IIO数据结构简介 401
15.2 集成IIO触发缓冲区支持 417
15.3 访问IIO数据 432
15.4 内核中的IIO消费者接口 436
15.5 编写用户空间的IIO应用程序 439
15.6 遍历用户空间IIO工具 455
15.7 总结 455
第 16章 充分利用引脚控制器和GPIO子系统 456
16.1 硬件术语介绍 456
16.2 引脚控制子系统介绍 458
16.3 利用GPIO控制器接口 464
16.4 充分利用GPIO子系统 482
16.5 学习如何避免编写GPIO客户端驱动程序 494
16.6 总结 509
第 17章 利用Linux内核输入子系统 510
17.1 Linux内核输入子系统简介 510
17.2 分配和注册输入设备 513
17.3 使用轮询输入设备 514
17.4 生成和报告输入事件 518
17.5 处理来自用户空间的输入设备 520
17.6 总结 524
点击下载