计算机
类型
7.4
豆瓣评分
可以朗读
语音朗读
385千字
字数
2021-03-01
发行日期
展开全部
主编推荐语
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日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。