1.内容全面深,涵盖Linux设备驱动发的各个方面,从基础知识到高级主题,包括各种子系统、内存管理、中断处理等,为读者提供系统且全面的知识体系。 2.理论实践结合,不仅有详细的理论讲解,还包含大量源代码示例,帮助读者更好地理解和应用知识。 3.作者经验丰富,作者约翰·马迪厄是嵌式Linux及内核工程师,具备深厚的专业知识和实践经验,行文兼具工程人的细致与凝练。
售 价:¥
纸质售价:¥132.40购买纸书
6.8
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐

内容提要
译者序
致谢
关于审校者
前言
资源与支持
第1篇 Linux内核开发基础
第1章 内核开发简介
1.1 设置开发环境
1.1.1 设置宿主机
1.1.2 获取Linux内核源代码
1.2 配置和构建Linux内核
1.2.1 指定编译选项
1.2.2 理解内核配置过程
1.2.3 构建Linux内核
第2章 Linux内核模块的基本概念
2.1 模块概念的介绍
2.2 构建Linux内核模块
2.2.1 理解Linux内核构建系统
2.2.2 树外构建
2.2.3 树内构建
2.3 处理模块参数
2.4 处理符号导出和模块依赖
2.5 学习Linux内核编程技巧
2.5.1 错误处理
2.5.2 消息打印
2.6 总结
第3章 处理内核的核心辅助函数
3.1 Linux内核加锁机制和共享资源
3.1.1 自旋锁
3.1.2 互斥锁
3.1.3 trylock方法
3.2 处理内核等待、睡眠和延迟机制
3.2.1 等待队列
3.2.2 内核中的简单睡眠
3.2.3 内核延迟或忙等待
3.3 深入理解Linux内核时间管理
3.3.1 时钟源、时钟事件和节拍设备的概念
3.3.2 使用标准内核低精度(low-res)定时器
3.3.3 高精度定时器(hrtimer)
3.4 实现工作延迟机制
3.4.1 软中断(softirq)
3.4.2 任务微调度(tasklet)
3.4.3 工作队列(workqueue)
3.4.4 新一代的工作队列
3.5 内核中断处理
3.6 总结
第4章 编写字符设备驱动程序
4.1 主设备号和次设备号的概念
4.2 字符设备数据结构介绍
4.2.1 设备文件操作介绍
4.2.2 内核中文件的表示
4.3 创建设备节点
4.3.1 设备识别
4.3.2 字符设备号的注册和分配
4.3.3 在系统中初始化和注册字符设备
4.4 实现文件操作
4.4.1 在内核空间和用户空间之间交换数据
4.4.2 实现打开文件操作
4.4.3 实现释放文件操作
4.4.4 实现写文件操作
4.4.5 实现读取文件操作
4.4.6 实现llseek文件操作
4.5 总结
第2篇 Linux内核平台抽象和
第5章 理解和利用设备树
5.1 设备树机制的基本概念
5.1.1 设备树命名约定
5.1.2 认识别名、标签、phandle和路径
5.1.3 理解节点和属性的覆盖
5.1.4 设备树源代码和编译器
5.2 如何表示和寻址设备
5.2.1 如何处理SPI和I2C设备寻址
5.2.2 内存映射设备和设备寻址
5.3 处理资源
5.3.1 resource结构体
5.3.2 提取应用程序的特定数据
5.4 总结
第6章 设备、驱动程序和平台抽象简介
6.1 Linux内核平台抽象和数据结构
6.1.1 device结构体
6.1.2 device_driver结构体
6.1.3 设备/驱动程序匹配和模块(自动)加载
6.1.4 设备声明——填充设备
6.2 设备与驱动程序匹配机制详解
6.3 总结
第7章 平台设备和驱动程序的概念
7.1 Linux内核中的平台核心抽象
7.2 处理平台设备
7.2.1 分配和注册平台设备
7.2.2 在代码中如何避免分配平台设备
7.2.3 使用平台资源
7.3 平台驱动程序抽象和架构
7.3.1 探测和释放平台设备
7.3.2 在驱动程序中对它所支持的设备进行配置
7.3.3 驱动程序的初始化和注册
7.4 从零开始编写平台驱动程序
7.5 总结
第8章 编写I2C设备驱动程序
8.1 Linux内核中的I2C框架抽象
8.1.1 struct i2c_adapter简介
8.1.2 I2C客户端和驱动程序数据结构
8.1.3 I2C通信接口
8.2 I2C设备驱动程序抽象和架构
8.2.1 探测I2C设备
8.2.2 实现i2c_driver.remove回调函数
8.2.3 驱动程序的初始化和注册
8.2.4 在驱动程序中配置设备
8.2.5 实例化I2C设备
8.3 如何避免编写I2C设备驱动程序
8.4 总结
第9章 编写SPI设备驱动程序
9.1 Linux内核中的SPI框架抽象
9.1.1 struct spi_controller简介
9.1.2 struct spi_device简介
9.1.3 struct spi_driver简介
9.1.4 消息传输数据结构
9.1.5 访问SPI设备
9.2 SPI设备驱动程序抽象和架构
9.2.1 探测SPI设备
9.2.2 在驱动程序中提供设备信息
9.2.3 实现spi_driver.remove回调函数
9.2.4 驱动程序的初始化和注册
9.2.5 实例化SPI设备
9.3 如何避免编写SPI设备驱动程序
9.4 总结
第3篇 充分发挥硬件的潜力
第10章 深入理解Linux内核内存分配
10.1 Linux内核内存相关术语简介
10.1.1 32位系统中的内核地址空间布局:低端内存和高端内存的概念
10.1.2 低端内存的细节
10.1.3 理解高端内存
10.2 揭开地址转换和MMU的神秘面纱
10.2.1 页查找和TLB
10.2.2 TLB如何运作
10.3 内存分配机制及其API
10.3.1 页分配器
10.3.2 Slab分配器
10.3.3 kmalloc分配器
10.3.4 vmalloc分配器
10.3.5 关于进程内存分配的幕后短故事
10.4 使用I/O内存与硬件通信
10.4.1 PIO设备访问
10.4.2 MMIO 设备访问
10.5 内存(重)映射
10.5.1 了解kmap()的用法
10.5.2 将内核内存映射到用户空间
10.6 总结
第11章 实现DMA支持
11.1 设置DMA映射
11.1.1 缓存一致性和DMA的概念
11.1.2 DMA的内存映射
11.1.3 创建一致性DMA映射
11.1.4 创建流DMA映射
11.1.5 单缓冲区映射
11.1.6 分散/聚集映射
11.1.7 流DMA映射的隐式和显式缓存一致性
11.2 完成(completion)的概念
11.3 DMA引擎API
11.3.1 DMA控制器接口简介
11.3.2 处理设备DMA寻址能力
11.3.3 请求DMA通道
11.3.4 配置DMA通道
11.3.5 配置DMA传输
11.3.6 提交DMA传输
11.3.7 发出待处理的DMA请求并等待回调通知
11.4 综合实例——单缓冲区的DMA映射
11.5 关于循环DMA的说明
11.6 了解DMA和设备树绑定
11.7 总结
第12章 内存访问抽象化——Regmap API简介:寄存器映射抽象化
12.1 初识Regmap
12.2 Regmap初始化
12.3 使用Regmap寄存器访问函数
12.3.1 批量和多寄存器读写函数
12.3.2 理解Regmap缓存系统
12.4 将所有内容整合在一起——基于Regmap的SPI设备驱动程序示例
12.5 从用户空间利用Regmap
12.6 总结
第13章 揭秘内核IRQ框架
13.1 中断的简要介绍
13.2 理解中断控制器和中断多路复用
13.3 深入研究高级外设IRQ管理
13.3.1 了解IRQ及其传播
13.3.2 链式IRQ
13.4 揭秘per-CPU中断
SGI和IPI
13.5 总结
第14章 LDM简介
14.1 LDM数据结构简介
14.1.1 总线
14.1.2 驱动程序数据结构
14.1.3 设备驱动程序注册
14.1.4 设备数据结构
14.1.5 设备注册
14.2 深入理解LDM
14.2.1 了解kobject结构体
14.2.2 了解kobj_type
14.2.3 了解kset结构体
14.2.4 使用非默认属性
14.2.5 使用二进制属性
14.3 sysfs中的设备模型概述
14.3.1 创建设备、驱动程序、总线和类相关属性
14.3.2 使sysfs属性poll和select兼容
14.4 总结
第4篇 嵌入式领域内的多种内核子系统
第15章 深入了解IIO框架
15.1 IIO数据结构简介
15.1.1 了解struct iio_dev
15.1.2 了解struct iio_info
15.1.3 IIO通道的概念
15.1.4 区分通道
15.1.5 将所有内容整合在一起——编写一个虚拟IIO驱动程序
15.2 集成IIO触发缓冲区支持
15.2.1 IIO触发器和sysfs(用户空间)
15.2.2 IIO缓冲区
15.2.3 将所有内容整合在一起
15.3 访问IIO数据
15.3.1 单次数据采集
15.3.2 访问数据缓冲区
15.4 内核中的IIO消费者接口
15.5 编写用户空间的IIO应用程序
15.5.1 扫描和创建IIO上下文
15.5.2 遍历和管理IIO设备
15.5.3 遍历和管理IIO通道
15.5.4 使用触发器进行工作
15.5.5 创建缓冲区并读取数据样本
15.6 遍历用户空间IIO工具
15.7 总结
第16章 充分利用引脚控制器和GPIO子系统
16.1 硬件术语介绍
16.2 引脚控制子系统介绍
16.3 利用GPIO控制器接口
16.3.1 编写GPIO控制器驱动程序
16.3.2 在GPIO控制器中启用IRQ芯片
16.3.3 在GPIO芯片中添加IRQ芯片支持
16.3.4 GPIO控制器绑定方式
16.4 充分利用GPIO子系统
16.4.1 基于整数的GPIO接口(现已弃用)
16.4.2 基于描述符的GPIO接口(推荐方式)
16.5 学习如何避免编写GPIO客户端驱动程序
16.5.1 告别旧的sysfs接口
16.5.2 欢迎使用GPIO库libgpiod
16.5.3 GPIO聚合器
16.6 总结
第17章 利用Linux内核输入子系统
17.1 Linux内核输入子系统简介
17.2 分配和注册输入设备
17.3 使用轮询输入设备
17.4 生成和报告输入事件
17.5 处理来自用户空间的输入设备
17.6 总结
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜