水木
水木
发布于 2024-08-30 / 27 阅读
0

Linux设备驱动开发

链接: https://pan.baidu.com/s/1fBP9tZFlyzGw8EFY4GQKWA?pwd=rxuc 提取码: rxuc

出版社: 清华大学出版社
ISBN:9787302619024
版次:1
商品编码:13798198
品牌:清华大学
包装:平装
开本:16开
出版时间:2022-12-01
用纸:胶版纸
页数:521
字数:688000
产品特色

编辑推荐

《Linux设备驱动开发》提供了有关Linux内核主题的较为全面的讨论(例如,市面图书中通常较少涉及的视频和音频框架,本书也有专门章节进行介绍)。我们将深入研究一些最复杂和具影响力的Linux内核框架,如PCI、用于SoC的ALSA和Video4Linux2(V4L2),并在此过程中提供了一些专业技巧提示和最佳实践。

内容简介

《Linux设备驱动开发》本书详细阐述了与Linux设备驱动开发相关的基本解决方案,主要包括Linux内核概念、regmap API应用、MFD子系统和syscon API、通用时钟框架、ALSA SoC框架、V4L2和视频采集、集成V4L2异步和媒体控制器框架、V4L2 API、Linux内核电源管理、PCI设备驱动、NVMEM框架、看门狗设备驱动、Linux内核调试技巧和最佳实践等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。

本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。

本书详细阐述了与Linux设备驱动开发相关的基本解决方案,主要包括Linux内核概念、regmap API应用、MFD子系统和syscon API、通用时钟框架、ALSA SoC框架、V4L2和视频采集、集成V4L2异步和媒体控制器框架、V4L2 API、Linux内核电源管理、PCI设备驱动、NVMEM框架、看门狗设备驱动、Linux内核调试技巧和最佳实践等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。

本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。




作者简介

约翰·马德奥现居住在法国巴黎,他是一位嵌入式Linux和内核工程师。他的主要工作包括为物联网、自动化、运输、医疗保健、能源和军事等领域的公司开发设备驱动程序和板级支持包(Board Support Package,BSP)。John是LABCSMART公司的创始人兼首席顾问,该公司可为嵌入式Linux和Linux内核工程提供培训和服务。他是一位开源和嵌入式系统爱好者,始终坚信只有分享知识,我们才能学到更多。

目录

第1篇 用于嵌入式设备驱动程序开发的内核核心框架

第1章 嵌入式开发人员需要掌握的Linux内核概念 3

1.1 技术要求 3

1.2 内核锁API和共享对象 3

1.2.1 自旋锁 4

1.2.2 禁用中断与仅禁用抢占 8

1.2.3 互斥锁 8

1.2.4 try-lock方法 11

1.3 Linux内核中的等待、感知和阻塞 13

1.3.1 等待活动完成或状态改变 13

1.3.2 Linux内核等待队列 15

1.4 工作延迟机制 19

1.4.1 softIRQ 20

1.4.2 关于ksoftirqd 24

1.4.3 tasklet 25

1.4.4 工作队列 28

1.4.5 内核共享队列 31

1.4.6 新的工作队列 32

1.4.7 并发管理的工作队列 33

1.5 Linux内核中断管理 37

1.5.1 中断的状态 37

1.5.2 中断处理流程 38

1.5.3 设计中断处理程序 40

1.5.4 中断的标志 42

1.5.5 中断的返回值 44

1.5.6 关于中断的一些注意事项 45

1.5.7 上半部和下半部的概念 46

1.5.8 线程中断处理程序 48

1.5.9 请求一个上下文中断 53

1.5.10 使用工作队列延迟下半部 55

1.5.11 从中断处理程序中锁定 58

1.6 小结 61

第2章 regmap API应用 63

2.1 技术要求 63

2.2 regmap及其数据结构 64

2.2.1 struct regmap_config结构体中的字段 65

2.2.2 访问设备寄存器 69

2.2.3 一次读/写多个寄存器 71

2.2.4 更新寄存器中的位 72

2.3 regmap和IRQ管理 73

2.3.1 Linux内核IRQ管理的结构 73

2.3.2 创建映射 74

2.3.3 struct irq_domain_ops 76

2.3.4 irq_domain_ops.map() 77

2.3.5 irq_domain_ops.xlate() 77

2.4 链接IRQ 78

2.4.1 链式中断 78

2.4.2 嵌套中断 83

2.4.3 irqchip和gpiolib API—新一代 85

2.4.4 基于gpiochip的链式IRQ芯片 87

2.4.5 基于gpiochip的嵌套IRQ芯片 89

2.5 regmap IRQ API和数据结构 91

2.5.1 regmap IRQ数据结构 91

2.5.2 regmap IRQ API 95

2.5.3 regmap IRQ API示例 98

2.6 小结 102

第3章 深入研究MFD子系统和syscon API 103

3.1 技术要求 103

3.2 MFD子系统和syscon API 104

3.2.1 da9055设备驱动程序示例 104

3.2.2 max8925设备驱动程序示例 113

3.3 MFD设备的设备树绑定 116

3.4 了解syscon和simple-mfd 119

3.4.1 syscon API 119

3.4.2 simple-mfd 123

3.5 小结 125

第4章 通用时钟框架 127

4.1 技术要求 128

4.2 CCF数据结构和接口 128

4.2.1 了解struct clk_hw及其依赖项 129

4.2.2 注册/取消注册时钟提供者 131

4.2.3 将时钟公开给使用者 135

4.2.4 时钟提供者设备树节点及其相关机制 136

4.2.5 了解of_parse_phandle_with_args() API 138

4.2.6 了解__of_clk_get_from_provider() API 140

4.2.7 时钟解码回调 141

4.3 编写时钟提供者驱动程序 145

4.3.1 有关时钟提供者驱动程序的基础知识 145

4.3.2 提供时钟操作 149

4.3.3 clk_hw.init.flags中的时钟标志 152

4.3.4 固定频率时钟案例研究及其操作 154

4.3.5 通用简化注意事项 156

4.3.6 固定频率时钟设备绑定 158

4.3.7 PWM时钟 159

4.3.8 固定倍频时钟驱动程序及其操作 160

4.3.9 固定倍频时钟的设备树绑定 162

4.3.10 门控时钟及其操作 162

4.