Linux设备驱动开发

Linux设备驱动开发

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

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 总结

Linux设备驱动开发是2021年由人民邮电出版社出版,作者 (法) 约翰·马迪厄 (John Madieu) 。

得书感谢您对《Linux设备驱动开发》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
嵌入式Linux与物联网软件开发——C语言内核深度解析 电子书
  针对性强:面向嵌入式Linux内核源码、底层驱动软件开发等技术方向。   精华原创:凝结作者多年研发及教学经验,帮助读者真正深度理解难点。   求职必读:详解常见面试题,完全应对 “嵌入式软件工程师”岗位需求。
奔跑吧 Linux内核 电子书
本书内容丰富,讲解清晰透彻,不仅适合有一定Linux相关基础的人员,包括从事与Linux相关的开发人员、操作系统的研究人员、嵌入式开发人员及Android底层开发人员等学习和使用,而且适合作为对Linux感兴趣的程序员的学习用书,也可以作为大专院校相关专业师生的学习用书和培训学校的教材。
Linux就该这么学 电子书
本书基于RHEL 7系统编写,面向零基础读者,从Linux基础知识讲起,然后渐进式地提高内容难度,详细讲解Linux系统中各种服务的工作原理和配置方式,以匹配真实生产环境对运维人员的要求,突显内容的实用性。
Linux命令应用大词典 电子书
Linux系统常用命令全攻略:729个命令,1935个实例。
Ubuntu Linux操作系统 电子书
本书主要讲解Linux桌面操作系统Ubuntu的配置管理、桌面应用、编程和软件开发。全书共12章,内容包括系统安装和基本使用、图形界面与命令行、用户与组管理、文件与目录管理、磁盘存储管理、软件包管理、系统管理、桌面应用、Shell编程、C/C++编程、Java与Android应用开发、LAMP平台与PHP开发环境。本书内容丰富,注重实践性和可操作性,对每个知识点都有相应的操作示范,便于读者快速上手