《嵌入式Linux驱动开发教程》
图书介绍

图书作者:华清远见嵌入式学院 姜先刚 刘洪涛 丛书名称: 高等院校嵌入式人才培养规划教材 出版日期:2017 年5月

编辑推荐理由

推荐评分:5.0分

国内领先的嵌入式培训机构华清远见出品

真正从企业用人需求出发,培养和提升读者能力

注重实践性、实用性重点突出

知识体系清晰、完整,内容逻辑性强,实验案例丰富

图书简介

本书可作为大学院校电子、通信、计算机、自动化等专业的嵌入式Linux设备驱动开发课程的教材,也可供嵌入式Linux驱动开发人员参考。
  • 《嵌入式Linux驱动开发教程》结合大量实例,在基于ARM Cortex-A9四核处理器Exynos4412的硬件教学平台和PC上,全面详细地讲解了Linux设备驱动开发。主要内容包括开发环境的搭建、内核模块、字符设备驱动框架、高级I/O、中断和时间管理、互斥和同步、内存和DMA、Linux设备模型、外设的驱动实例、总线类设备驱动、块设备驱动、网络设备驱动和内核调试技术。每一个知识点都有一个对应的典型实例,大多数实例既可以在上面说到的嵌入式平台上运行,也可以在PC上运行。另外,《嵌入式Linux驱动开发教程》也引入了新内核的一些新特性,比如高分辨率定时器、针对嵌入式平台的dmaengine和设备树。在需要重点关注的地方还加入了大量的内核源码分析,使读者能够快速并深刻理解Linux设备驱动的开发。 《嵌入式Linux驱动开发教程》可作为大学院校电子、通信、计算机、自动化等专业的嵌入式Linux设备驱动开发课程的教材,也可供嵌入式Linux驱动开发人员参考。

图书目录

  • ※ 第1章 概述 1 

  • ※ 第2章 内核模块 6

  • 2.1 第一个内核模块程序 7
  • 2.2 内核模块的相关工具 10
  • 2.3 内核模块一般的形式 11
  • 2.4 将多个源文件编译生成一个内核模块 13
  • 2.5 内核模块参数 15
  • 2.6 内核模块依赖 17
  • 2.7 关于内核模块的进一步讨论 20
  • 2.8 习题 21
  • ※ 第3章 字符设备驱动 23 

  • 3.1 字符设备驱动基础 24
  • 3.2 字符设备驱动框架 30
  • 3.3 虚拟串口设备 35
  • 3.4 虚拟串口设备驱动 35
  • 3.5 一个驱动支持多个设备 39
  • 3.6 习题 45
  • ※ 第4章 高级I/O操作 46 

  • 4.1 ioctl设备操作 47
  • 4.2 proc文件操作 56
  • 4.3 非阻塞型I/O 58
  • 4.4 阻塞型I/O 60
  • 4.5 I/O多路复用 65
  • 4.6 异步I/O 69
  • 4.7 几种I/O模型总结 73
  • 4.8 异步通知 74
  • 4.9 mmap设备文件操作 83
  • 4.10 定位操作 88
  • 4.11 习题 90
  • ※ 第5章 中断和时间管理 92 

  • 5.1 中断进入过程 93
  • 5.2 驱动中的中断处理 98
  • 5.3 中断下半部 101
  • 5.3.1 软中断 102
  • 5.3.2 tasklet 104
  • 5.3.3 工作队列 106
  • 5.4 延时控制 108
  • 5.5 定时操作 109
  • 5.5.1 低分辨率定时器 109
  • 5.5.2 高分辨率定时器 112
  • 5.6 习题 114
  • ※ 第6章 互斥和同步 116 

  • 6.1 一种典型的竞态 117
  • 6.2 内核中的并发 117
  • 6.3 中断屏蔽 118
  • 6.4 原子变量 119
  • 6.5 自旋锁 120
  • 6.6 读写锁 122
  • 6.7 顺序锁 123
  • 6.8 信号量 125
  • 6.9 读写信号量 127
  • 6.10 互斥量 127
  • 6.11 RCU机制 128
  • 6.12 虚拟串口驱动加入互斥 130
  • 6.13 完成量 134
  • 6.14 习题 135
  • ※ 第7章 内存和DMA 137 

  • 7.1 内存组织 138
  • 7.2 按页分配内存 139
  • 7.3 slab分配器 142
  • 7.4 不连续内存页分配 144
  • 7.5 per-CPU变量 145
  • 7.6 动态内存实例 146
  • 7.7 I/O内存 147
  • 7.8 DMA原理及映射 155
  • 7.8.1 DMA工作原理 155
  • 7.8.2 DMA映射 157
  • 7.9 DMA统一编程接口 160
  • 7.10 习题 164
  • ※ 第8章 Linux设备模型 166 

  • 8.1 设备模型基础 167
  • 8.2 总线、设备和驱动 171
  • 8.3 平台设备及其驱动 176
  • 8.3.1 平台设备 176
  • 8.3.2 平台驱动 178
  • 8.3.3 平台驱动简单实例 179
  • 8.3.4 电源管理 182
  • 8.3.5 udev和驱动的自动加载 183
  • 8.3.6 使用平台设备的LED驱动 184
  • 8.3.7 自动创建设备节点 190
  • 8.4 Linux设备树 193
  • 8.4.1 Linux设备树的由来 193
  • 8.4.2 Linux设备树的目的 194
  • 8.4.3 Linux设备树的使用 195
  • 8.4.4 使用设备树的LED驱动 202
  • 8.5 习题 204
  • ※ 第9章 字符设备驱动实例 205 

  • 9.1 LED驱动 206
  • 9.2 基于中断的简单按键驱动 209
  • 9.3 基于输入子系统的按键驱动 213
  • 9.4 ADC驱动 222
  • 9.5 PWM驱动 231
  • 9.6 RTC驱动 239
  • ※ 第10章 总线类设备驱动 243

  • 10.1 I2C设备驱动 244
  • 10.1.1 I2C协议简介 244
  • 10.1.2 Linux I2C驱动 246
  • 10.1.3 I2C设备驱动实例 251
  • 10.2 SPI设备驱动 258
  • 10.2.1 SPI协议简介 258
  • 10.2.2 Linux SPI驱动 259
  • 10.2.3 SPI设备驱动范例 264
  • 10.3 USB设备驱动 268
  • 10.3.1 USB协议简介 268
  • 10.3.2 Linux USB驱动 271
  • 10.3.3 USB设备驱动实例 274
  • 10.4 PCI设备驱动 283
  • 10.4.1 PCI协议简介 283
  • 10.4.2 Linux PCI驱动 287
  • 10.4.3 PCI设备驱动实例 288
  • 10.5 习题 296
  • ※ 第11章 块设备驱动 298

  • 11.1 磁盘结构 299
  • 11.2 块设备内核组件 300
  • 11.3 块设备驱动核心数据结构和函数 301
  • 11.4 块设备驱动实例 308
  • 11.5 习题 316
  • ※ 第12章 网络设备驱动 317

  • 12.1 网络层次结构 318
  • 12.2 网络设备驱动核心数据结构和函数 319
  • 12.3 网络设备驱动实例 327
  • 12.4 DM9000网络设备驱动代码分析 333
  • 12.5 NAPI 340
  • 12.6 习题 343
  • ※ 第13章 内核调试技术 344

  • 13.1 内核调试方法 345
  • 13.1.1 内核调试概述 345
  • 13.1.2 学会分析内核源程序 346
  • 13.1.3 调试方法介绍 346
  • 13.2 内核打印函数 350
  • 13.2.1 内核镜像解压前的串口输出函数 350
  • 13.2.2 内核镜像解压后的串口输出函数 352
  • 13.2.3 内核打印函数 353
  • 13.3 获取内核信息 357
  • 13.3.1 系统请求键 357
  • 13.3.2 通过/proc接口 358
  • 13.3.3 通过/sys接口 359
  • 13.4 处理出错信息 362
  • 13.4.1 oops信息 362
  • 13.4.2 panic 364
  • 13.4.3 通过ioctl方法 366
  • 13.5 内核源码调试 367
  • 13.6 习题 369
  • ※ 第14章 搭建开发环境 370

  • 14.1 准备Linux开发主机 371
  • 14.2 安装串口相关软件 375
  • 14.2.1 安装串口驱动 375
  • 14.2.2 安装串口终端软件PuTTY 376
  • 14.2.3 安装串口终端软件minicom 377
  • 14.3 安装TFTP和NFS服务器 379
  • 14.4 准备Linux内核源码 381
  • 14.5 在目标板上运行Linux系统 382
  • 14.6 源码浏览及编辑器环境 386
  • ※ 习题答案 388

  • ※ 参考文献 389