展开全部

主编推荐语

Linux驱动开发基础知识及实践指南

内容简介

本书讲解了Linux驱动开发的基础知识以及所用到的开发环境,其内容涵盖了各种Linux子系统,包含存储管理、RTC、IIO、时钟框架等;还讲解了直接存储访问、内核存储管理以及内核缓存系统等。在学完本书之后,读者将掌握设备驱动开发环境的概念,以及使用新的内核版本从零开始编写驱动程序。本书写作时Linux内核版本为v4.13,书中的源代码已经在x86 PC和SECO的UDOO Quad上进行了测试,其中UDOO Quad的主芯片是恩智浦的ARM i.MX6,它具有丰富的功能和外部接口,可以覆盖本书中讨论的所有测试。

目录

  • 版权信息
  • 内容提要
  • 关于作者
  • 致谢
  • 关于审校者
  • 前言
  • 资源与支持
  • 第1章 内核开发简介
  • 1.1 环境设置
  • 1.1.1 获取源代码
  • 1.1.2 内核配置
  • 1.1.3 构建自己的内核
  • 1.2 内核约定
  • 1.2.1 编码风格
  • 1.2.2 内核结构分配和初始化
  • 1.2.3 类、对象、面向对象的编程
  • 1.3 总结
  • 第2章 设备驱动程序基础
  • 2.1 内核空间和用户空间
  • 2.1.1 模块的概念
  • 2.1.2 模块依赖
  • 2.1.3 模块的加载和卸载
  • 2.2 驱动程序框架
  • 2.2.1 模块的入点和出点
  • 2.2.2 模块信息
  • 2.3 错误和消息打印
  • 2.3.1 错误处理
  • 2.3.2 处理空指针错误
  • 2.3.3 消息打印——printk()
  • 2.4 模块参数
  • 2.5 构建第一个模块
  • 2.5.1 模块的makefile
  • 2.5.2 内核树内
  • 2.5.3 内核树外
  • 2.5.4 构建模块
  • 2.6 总结
  • 第3章 内核工具和辅助函数
  • 3.1 理解宏container_of
  • 3.2 链表
  • 3.2.1 创建和初始化链表
  • 3.2.2 创建链表节点
  • 3.2.3 添加链表节点
  • 3.2.4 删除链表节点
  • 3.2.5 链表遍历
  • 3.3 内核的睡眠机制
  • 3.4 延迟和定时器管理
  • 3.4.1 标准定时器
  • 3.4.2 高精度定时器(HRT)
  • 3.4.3 动态Tick/Tickless内核
  • 3.4.4 内核中的延迟和睡眠
  • 3.5 内核的锁机制
  • 3.5.1 互斥锁
  • 3.5.2 自旋锁
  • 3.6 工作延迟机制
  • 3.6.1 Softirq和Ksoftirqd
  • 3.6.2 Tasklet
  • 3.6.3 Tasklet调度
  • 3.6.4 工作队列
  • 3.6.5 内核线程
  • 3.7 内核中断机制
  • 3.7.1 注册中断处理程序
  • 3.7.2 下半部的概念
  • 3.8 线程化中断
  • 3.9 从内核调用用户空间应用程序
  • 3.10 总结
  • 第4章 字符设备驱动程序
  • 4.1 主设备和次设备的概念
  • 4.2 设备文件操作
  • 4.3 分配和注册字符设备
  • 4.4 写文件操作
  • 4.4.1 内核空间和用户空间数据交换
  • 4.4.2 open方法
  • 4.4.3 release方法
  • 4.4.4 write方法
  • 4.4.5 read方法
  • 4.4.6 llseek方法
  • 4.4.7 poll方法
  • 4.4.8 ioctl方法
  • 4.4.9 填充file_operations结构
  • 4.5 总结
  • 第5章 平台设备驱动程序
  • 5.1 平台驱动程序
  • 5.2 平台设备
  • 5.3 设备、驱动程序和总线匹配
  • 5.4 总结
  • 第6章 设备树的概念
  • 6.1 设备树机制
  • 6.1.1 命名约定
  • 6.1.2 别名、标签和phandle
  • 6.1.3 DT编译器
  • 6.2 表示和寻址设备
  • 6.2.1 SPI和I2C寻址
  • 6.2.2 平台设备寻址
  • 6.3 处理资源
  • 6.3.1 命名资源的概念
  • 6.3.2 访问寄存器
  • 6.3.3 处理中断
  • 6.3.4 提取特定应用数据
  • 6.4 平台驱动程序和DT
  • 6.4.1 OF匹配风格
  • 6.4.2 匹配风格混合
  • 6.4.3 平台数据与DT
  • 6.5 总结
  • 第7章 I2C客户端驱动程序
  • 7.1 驱动程序架构
  • 7.1.1 i2c_driver结构
  • 7.1.2 驱动程序的初始化和注册
  • 7.1.3 驱动程序和设备的配置
  • 7.2 访问客户端
  • 7.2.1 普通I2C通信
  • 7.2.2 系统管理总线(SMBus)兼容函数
  • 7.2.3 在开发板配置文件中实例化I2C设备(弃用的旧方式)
  • 7.3 I2C和设备树
  • 7.3.1 定义和注册I2C驱动程序
  • 7.3.2 在设备树中实例化I2C设备——新方法
  • 7.3.3 小结
  • 7.4 总结
  • 第8章 SPI设备驱动程序
  • 8.1 驱动程序架构
  • 8.1.1 设备结构
  • 8.1.2 spi_driver结构
  • 8.1.3 驱动程序的初始化和注册
  • 8.1.4 驱动程序和设备配置
  • 8.2 访问和与客户端通信
  • 8.3 小结
  • 8.4 SPI用户模式驱动程序
  • 8.5 总结
  • 第9章 Regmap API——寄存器映射抽象
  • 9.1 使用Regmap API编程
  • 9.1.1 regmap_config结构
  • 9.1.2 Regmap初始化
  • 9.1.3 设备访问函数
  • 9.1.4 Regmap和缓存
  • 9.1.5 小结
  • 9.1.6 Regmap示例
  • 9.2 总结
  • 第10章 IIO框架
  • 10.1 IIO数据结构
  • 10.1.1 iio_dev数据结构
  • 10.1.2 iio_info结构
  • 10.1.3 IIO通道
  • 10.1.4 小结
  • 10.2 触发缓冲区支持
  • 10.2.1 IIO触发器和sysfs(用户空间)
  • 10.2.2 IIO缓冲区
  • 10.2.3 小结
  • 10.3 IIO数据访问
  • 10.3.1 单次捕获
  • 10.3.2 缓冲区数据访问
  • 10.4 IIO工具
  • 10.5 总结
  • 第11章 内核内存管理
  • 11.1 系统内存布局——内核空间和用户空间
  • 11.1.1 内核地址——低端和高端内存概念
  • 11.1.2 用户空间寻址
  • 11.1.3 虚拟内存区域
  • 11.2 地址转换和MMU
  • 11.3 内存分配机制
  • 11.3.1 页面分配器
  • 11.3.2 Slab分配器
  • 11.3.3 kmalloc分配系列
  • 11.3.4 vmalloc分配器
  • 11.3.5 后台的进程内存分配
  • 11.4 使用I/O内存访问硬件
  • 11.4.1 PIO设备访问
  • 11.4.2 MMIO设备访问
  • 11.5 内存(重)映射
  • 11.5.1 kmap
  • 11.5.2 映射内核内存到用户空间
  • 11.6 Linux缓存系统
  • 11.6.1 什么是缓存
  • 11.6.2 为什么数据延迟写入磁盘
  • 11.7 设备管理的资源——Devres
  • 11.8 总结
  • 第12章 DMA——直接内存访问
  • 12.1 设置DMA映射
  • 12.1.1 缓存一致性和DMA
  • 12.1.2 DMA映射
  • 12.2 完成的概念
  • 12.3 DMA引擎API
  • 12.3.1 分配DMA从通道
  • 12.3.2 设置从设备和控制器指定参数
  • 12.3.3 获取事务描述符
  • 12.3.4 提交事务
  • 12.3.5 发布待处理DMA请求并等待回调通知
  • 12.4 小结——NXP SDMA(i.MX6)
  • 12.5 DMA DT绑定
  • 12.6 总结
  • 第13章 Linux设备模型
  • 13.1 LDM数据结构
  • 13.1.1 总线
  • 13.1.2 设备驱动程序
  • 13.1.3 设备
  • 13.2 深入剖析LDM
  • 13.2.1 kobject结构
  • 13.2.2 kobj_type
  • 13.2.3 内核对象集合
  • 13.2.4 属性
  • 13.3 设备模型和sysfs
  • 13.3.1 sysfs文件和属性
  • 13.3.2 允许轮询sysfs属性文件
  • 13.4 总结
  • 第14章 引脚控制和GPIO子系统
  • 14.1 引脚控制子系统
  • 14.2 GPIO子系统
  • 14.2.1 基于整数的GPIO接口:传统方法
  • 14.2.2 基于描述符的GPIO接口:新的推荐方式
  • 14.2.3 GPIO接口和设备树
  • 14.2.4 GPIO和sysfs
  • 14.3 总结
  • 第15章 GPIO控制器驱动程序——gpio_chip
  • 15.1 驱动程序体系结构和数据结构
  • 15.2 引脚控制器指南
  • 15.3 GPIO控制器的sysfs接口
  • 15.4 GPIO控制器和DT
  • 15.5 总结
  • 第16章 高级IRQ管理
  • 16.1 中断复用和中断控制器
  • 16.2 高级外设IRQ管理
  • 16.3 中断请求和传播
  • 16.3.1 链接IRQ
  • 16.3.2 案例研究——GPIO和IRQ芯片
  • 16.4 总结
  • 第17章 输入设备驱动程序
  • 17.1 输入设备结构
  • 17.2 分配并注册输入设备
  • 17.3 产生和报告输入事件
  • 17.4 用户空间接口
  • 17.5 回顾
  • 17.6 总结
  • 第18章 RTC驱动程序
  • 18.1 RTC框架数据结构
  • 18.2 RTC和用户空间
  • 18.2.1 sysfs接口
  • 18.2.2 hwclock工具
  • 18.3 总结
  • 第19章 PWM驱动程序
  • 19.1 PWM控制器驱动程序
  • 19.1.1 驱动程序示例
  • 19.1.2 PWM控制器绑定
  • 19.2 PWM消费者接口
  • 19.3 通过sysfs接口使用PWM
  • 19.4 总结
  • 第20章 调节器框架
  • 20.1 PMIC/生产者驱动程序接口
  • 20.1.1 驱动程序数据结构
  • 20.1.2 驱动程序方法
  • 20.1.3 驱动程序示例
  • 20.2 调节器消费者接口
  • 20.2.1 调节器设备请求
  • 20.2.2 控制调节器设备
  • 20.3 调节器绑定
  • 20.4 总结
  • 第21章 帧缓冲驱动程序
  • 21.1 驱动程序数据结构
  • 21.2 设备方法
  • 21.3 驱动程序方法
  • 21.3.1 fb_ops剖析
  • 21.3.2 小结
  • 21.4 用户空间的帧缓冲
  • 21.5 总结
  • 第22章 网络接口卡驱动程序
  • 22.1 驱动程序数据结构
  • 22.1.1 套接字缓冲区结构
  • 22.1.2 网络接口结构
  • 22.2 设备方法
  • 22.2.1 打开和关闭
  • 22.2.2 数据包处理
  • 22.2.3 驱动程序示例
  • 22.2.4 状态和控制
  • 22.3 驱动程序方法
  • 22.3.1 probe函数
  • 22.3.2 模块卸载
  • 22.4 总结
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

人民邮电出版社

人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。