书籍详情
嵌入式Linux驱动模板精讲与项目实践
作者:林锡龙 著
出版社:电子工业出版社
出版时间:2014-05-01
ISBN:9787121230820
定价:¥59.00
购买这本书可以去
内容简介
本书从实用的角度对嵌入式Linux驱动设计开发从理论到实践做了比较深入的介绍,以Mini2440开发板为基础,对各种常见驱动开发进行模板化设计训练,各种模板可以直接应用到实际项目开发中,其中的一线研发技巧和案例分析可以供专业特训和广大嵌入式Linux开发者实战使用。本书共分为13章,书中介绍的各种开发技巧对实际应用有很大的借鉴意义,在各个知识点介绍中穿插实际项目的经验分享,包括实际研发的管理经验介绍,对驱动开发初学者和实际设计开发人员有很大益处,也可作为一线研发公司的岗前培训教程。本书重点在于内核驱动的讲解,以及模板式开发的训练,力求完全揭晓各种Linux开发中的技巧和模糊点,是一本比较实用的驱动开发训练教程。
作者简介
8年嵌入式软件一线研发经验,曾在华为等通信公司从事底层软件研发、Linux驱动开发工作。多次担任专业培训机构高级培训师,主讲嵌入式Linux驱动开发。
目录
目 录
第1章 驱动总论 (1)
1.1 总论 (1)
1.1.1 驱动在内核中的比例 (1)
1.1.2 驱动开发需要具备的能力 (1)
1.1.3 驱动开发重点关注的内容 (2)
1.2 驱动理论与思想 (3)
1.2.1 分类思想 (4)
1.2.2 分层思想 (4)
1.2.3 分离思想 (10)
1.2.4 总线思想 (11)
本章小结 (11)
第2章 内核编程及基础知识点 (12)
2.1 内核线程 (12)
2.2 内核定时器 (16)
2.3 链表 (18)
2.4 内存操作 (18)
2.5 I/O端口 (20)
2.6 内核相关宏 (21)
2.7 内核态文件操作 (22)
2.8 内核通知链 (25)
本章小结 (30)
第3章 模块与常用字符设备方法 (31)
3.1 Linux驱动 (31)
3.2 内核驱动模块剖析 (32)
3.2.1 内核模块 (34)
3.2.2 模块工具集 (34)
3.2.3 模块文件结构分析 (36)
3.2.4 内核管理 (37)
3.2.5 Modutils工具包及Module-init-tools移植 (37)
3.2.6 符号 (37)
3.2.7 驱动模块之间的依赖 (38)
3.2.8 模块编译流程细节 (38)
3.2.9 模块编写 (39)
3.3 宏观分析Linux驱动 (39)
3.4 设备文件 (41)
3.5 设备管理系统 (46)
3.5.1 自动创建和管理设备文件揭秘 (46)
3.5.2 devfs、mdev和udev (46)
3.5.3 udev基本原理与流程 (47)
3.5.4 热插拔与冷插拔 (48)
3.5.5 class (48)
3.6 字符设备驱动 (50)
3.6.1 原始方式 (51)
3.6.2 静态设定设备号方式 (51)
3.6.3 使用udev工具自动生成设备文件方式 (52)
3.6.4 简洁型字符设备驱动――misc字符设备驱动方式 (53)
3.7 设备操作方法file_operations (55)
3.7.1 ioctl和unlocked_ioctl操作 (57)
3.7.2 read/write设备方法 (65)
3.7.3 llseek设备方法 (70)
3.7.4 mmap设备方法 (70)
3.7.5 利用mmap在应用层实现硬件操作 (75)
本章小结 (76)
第4章 同步和互斥 (77)
4.1 概述 (77)
4.2 基本概念 (77)
4.3 互斥和同步机制 (79)
4.4 互斥 (79)
4.4.1 屏蔽中断 (79)
4.4.2 原子操作 (80)
4.4.3 自旋锁 (81)
4.4.4 信号量 (82)
4.4.5 自旋锁与信号量 (83)
4.4.6 互斥体:专用于互斥 (84)
4.5 同步 (84)
本章小结 (86)
第5章 中断系统 (87)
5.1 中断概述 (87)
5.2 基本概念 (87)
5.3 中断原理及使用注意事项 (89)
5.4 中断接口函数 (89)
5.4.1 中断申请和释放 (89)
5.4.2 中断共享 (90)
5.4.3 中断例程之一:按键中断 (92)
5.4.4 中断例程之二:A/D转换驱动 (96)
5.5 底半部:tasklet、工作队列 (104)
5.6 时间管理 (106)
本章小结 (107)
第6章 设备高级特性 (108)
6.1 字符设备file_operations的高级特性 (108)
6.2 Linux设备驱动的I/O模型 (109)
6.2.1 同步阻塞I/O (109)
6.2.2 同步非阻塞I/O (109)
6.2.3 异步阻塞I/O (110)
6.2.4 异步非阻塞I/O (110)
6.2.5 异步通知 (110)
6.2.6 同步阻塞型I/O的实现:建立在等待队列的基础上 (117)
6.2.7 异步阻塞型I/O的实现:基于poll系统调用操作接口函数 (121)
6.3 设备复用 (126)
本章小结 (128)
第7章 高级类型驱动 (129)
7.1 misc类型驱动 (129)
7.1.1 概述 (129)
7.1.2 结构与流程分析 (129)
7.1.3 关于设备节点的创建 (130)
7.2 input类型驱动 (130)
7.2.1 input驱动概述 (130)
7.2.2 三个主要结构体 (133)
7.2.3 Input驱动步骤 (136)
7.3 触摸屏驱动 (144)
7.4 I2C驱动 (150)
7.4.1 I2C总线接口 (150)
7.4.2 I2C内核驱动层及相关文件分析 (151)
7.4.3 重要的数据结构及相关联系 (153)
7.4.4 流程分析 (157)
7.4.5 i2c-tools (165)
7.5 块设备驱动 (169)
7.5.1 块设备驱动分析 (169)
7.5.2 制作一个块设备例子:RamDisk驱动 (174)
本章小结 (177)
第8章 虚拟文件系统 (178)
8.1 内核在线窗口――虚拟文件系统 (178)
8.2 proc文件系统 (179)
8.2.1 目录介绍 (179)
8.2.2 创建目录与文件 (184)
8.2.3 相关应用 (185)
8.3 sys文件系统 (186)
8.3.1 sys文件系统概述 (186)
8.3.2 sys文件目录 (187)
8.3.3 sys文件系统接口函数与创建文件夹模板 (189)
本章小结 (192)
第9章 设备驱动模型 (193)
9.1 设备驱动模型概述 (193)
9.2 sys文件系统与设备驱动模型 (194)
9.3 认识设备驱动模型 (195)
9.4 两大基石kobject和kset (197)
9.4.1 内核对象kobject (197)
9.4.2 另外一个基石kset (199)
9.5 subsystem (203)
9.6 三角关系核心――总线、设备、驱动 (204)
9.6.1 总线 (204)
9.6.2 设备 (207)
9.6.3 驱动 (209)
9.7 platform总线 (211)
9.8 serio总线 (220)
9.8.1 serio子系统介绍 (220)
9.8.2 serio子系统框架 (220)
9.8.3 主要数据结构 (223)
本章小结 (229)
第10章 嵌入式Linux文件系统 (230)
10.1 文件系统介绍 (230)
10.2 创建最简单的根文件系统 (233)
10.3 YAFFS文件系统移植 (241)
10.4 JFFS2文件系统制作 (250)
10.5 ramdisk文件系统制作 (250)
10.6 cramfs文件系统制作 (252)
本章小结 (253)
第11章 开发与调试技巧 (254)
11.1 vim使用 (254)
11.2 工具使用 (254)
11.3 printk使用技巧 (259)
11.4 使用proc在线打开打印开关 (260)
11.5 异常崩溃oops处理 (261)
11.6 动态修改模块参数 (269)
11.7 使用devmem2操作物理地址 (269)
11.8 时间测量 (270)
11.9 善于使用开源项目 (270)
本章小结 (271)
第12章 底层驱动规划与管理探索 (272)
12.1 底层驱动规划探索 (272)
12.1.1 设计理念概述 (272)
12.1.2 底层平台软件设计 (273)
12.1.3 底层平台软件管理规则 (276)
12.1.4 独立驱动模块的版本管理 (276)
12.1.5 提供最基本的系统 (278)
12.1.6 驱动开发注意事项 (278)
12.1.7 版本库 (279)
12.1.8 平台版本构建发布 (282)
12.2 研发管理 (283)
12.2.1 嵌入式软件研发管理畅想 (284)
12.2.2 嵌入式软件V字形开发模式 (285)
12.3 软件开发文档 (286)
12.3.1 可行性分析报告 (286)
12.3.2 嵌入式软件系统设计方案文档 (289)
12.3.3 嵌入式软件概要设计 (290)
12.3.4 嵌入式软件详细设计 (293)
12.3.5 案例分析 (294)
本章小结 (295)
第13章 Linux设备驱动编程规范 (296)
13.1 基本原则 (296)
13.2 布局 (297)
13.3 基本格式 (299)
13.4 对齐 (300)
13.5 空行空格 (301)
13.6 注释 (301)
13.7 命名 (302)
13.8 函数 (302)
13.9 可靠性 (303)
13.10 其他 (303)
本章小结 (305)
参考文献 (306)
第1章 驱动总论 (1)
1.1 总论 (1)
1.1.1 驱动在内核中的比例 (1)
1.1.2 驱动开发需要具备的能力 (1)
1.1.3 驱动开发重点关注的内容 (2)
1.2 驱动理论与思想 (3)
1.2.1 分类思想 (4)
1.2.2 分层思想 (4)
1.2.3 分离思想 (10)
1.2.4 总线思想 (11)
本章小结 (11)
第2章 内核编程及基础知识点 (12)
2.1 内核线程 (12)
2.2 内核定时器 (16)
2.3 链表 (18)
2.4 内存操作 (18)
2.5 I/O端口 (20)
2.6 内核相关宏 (21)
2.7 内核态文件操作 (22)
2.8 内核通知链 (25)
本章小结 (30)
第3章 模块与常用字符设备方法 (31)
3.1 Linux驱动 (31)
3.2 内核驱动模块剖析 (32)
3.2.1 内核模块 (34)
3.2.2 模块工具集 (34)
3.2.3 模块文件结构分析 (36)
3.2.4 内核管理 (37)
3.2.5 Modutils工具包及Module-init-tools移植 (37)
3.2.6 符号 (37)
3.2.7 驱动模块之间的依赖 (38)
3.2.8 模块编译流程细节 (38)
3.2.9 模块编写 (39)
3.3 宏观分析Linux驱动 (39)
3.4 设备文件 (41)
3.5 设备管理系统 (46)
3.5.1 自动创建和管理设备文件揭秘 (46)
3.5.2 devfs、mdev和udev (46)
3.5.3 udev基本原理与流程 (47)
3.5.4 热插拔与冷插拔 (48)
3.5.5 class (48)
3.6 字符设备驱动 (50)
3.6.1 原始方式 (51)
3.6.2 静态设定设备号方式 (51)
3.6.3 使用udev工具自动生成设备文件方式 (52)
3.6.4 简洁型字符设备驱动――misc字符设备驱动方式 (53)
3.7 设备操作方法file_operations (55)
3.7.1 ioctl和unlocked_ioctl操作 (57)
3.7.2 read/write设备方法 (65)
3.7.3 llseek设备方法 (70)
3.7.4 mmap设备方法 (70)
3.7.5 利用mmap在应用层实现硬件操作 (75)
本章小结 (76)
第4章 同步和互斥 (77)
4.1 概述 (77)
4.2 基本概念 (77)
4.3 互斥和同步机制 (79)
4.4 互斥 (79)
4.4.1 屏蔽中断 (79)
4.4.2 原子操作 (80)
4.4.3 自旋锁 (81)
4.4.4 信号量 (82)
4.4.5 自旋锁与信号量 (83)
4.4.6 互斥体:专用于互斥 (84)
4.5 同步 (84)
本章小结 (86)
第5章 中断系统 (87)
5.1 中断概述 (87)
5.2 基本概念 (87)
5.3 中断原理及使用注意事项 (89)
5.4 中断接口函数 (89)
5.4.1 中断申请和释放 (89)
5.4.2 中断共享 (90)
5.4.3 中断例程之一:按键中断 (92)
5.4.4 中断例程之二:A/D转换驱动 (96)
5.5 底半部:tasklet、工作队列 (104)
5.6 时间管理 (106)
本章小结 (107)
第6章 设备高级特性 (108)
6.1 字符设备file_operations的高级特性 (108)
6.2 Linux设备驱动的I/O模型 (109)
6.2.1 同步阻塞I/O (109)
6.2.2 同步非阻塞I/O (109)
6.2.3 异步阻塞I/O (110)
6.2.4 异步非阻塞I/O (110)
6.2.5 异步通知 (110)
6.2.6 同步阻塞型I/O的实现:建立在等待队列的基础上 (117)
6.2.7 异步阻塞型I/O的实现:基于poll系统调用操作接口函数 (121)
6.3 设备复用 (126)
本章小结 (128)
第7章 高级类型驱动 (129)
7.1 misc类型驱动 (129)
7.1.1 概述 (129)
7.1.2 结构与流程分析 (129)
7.1.3 关于设备节点的创建 (130)
7.2 input类型驱动 (130)
7.2.1 input驱动概述 (130)
7.2.2 三个主要结构体 (133)
7.2.3 Input驱动步骤 (136)
7.3 触摸屏驱动 (144)
7.4 I2C驱动 (150)
7.4.1 I2C总线接口 (150)
7.4.2 I2C内核驱动层及相关文件分析 (151)
7.4.3 重要的数据结构及相关联系 (153)
7.4.4 流程分析 (157)
7.4.5 i2c-tools (165)
7.5 块设备驱动 (169)
7.5.1 块设备驱动分析 (169)
7.5.2 制作一个块设备例子:RamDisk驱动 (174)
本章小结 (177)
第8章 虚拟文件系统 (178)
8.1 内核在线窗口――虚拟文件系统 (178)
8.2 proc文件系统 (179)
8.2.1 目录介绍 (179)
8.2.2 创建目录与文件 (184)
8.2.3 相关应用 (185)
8.3 sys文件系统 (186)
8.3.1 sys文件系统概述 (186)
8.3.2 sys文件目录 (187)
8.3.3 sys文件系统接口函数与创建文件夹模板 (189)
本章小结 (192)
第9章 设备驱动模型 (193)
9.1 设备驱动模型概述 (193)
9.2 sys文件系统与设备驱动模型 (194)
9.3 认识设备驱动模型 (195)
9.4 两大基石kobject和kset (197)
9.4.1 内核对象kobject (197)
9.4.2 另外一个基石kset (199)
9.5 subsystem (203)
9.6 三角关系核心――总线、设备、驱动 (204)
9.6.1 总线 (204)
9.6.2 设备 (207)
9.6.3 驱动 (209)
9.7 platform总线 (211)
9.8 serio总线 (220)
9.8.1 serio子系统介绍 (220)
9.8.2 serio子系统框架 (220)
9.8.3 主要数据结构 (223)
本章小结 (229)
第10章 嵌入式Linux文件系统 (230)
10.1 文件系统介绍 (230)
10.2 创建最简单的根文件系统 (233)
10.3 YAFFS文件系统移植 (241)
10.4 JFFS2文件系统制作 (250)
10.5 ramdisk文件系统制作 (250)
10.6 cramfs文件系统制作 (252)
本章小结 (253)
第11章 开发与调试技巧 (254)
11.1 vim使用 (254)
11.2 工具使用 (254)
11.3 printk使用技巧 (259)
11.4 使用proc在线打开打印开关 (260)
11.5 异常崩溃oops处理 (261)
11.6 动态修改模块参数 (269)
11.7 使用devmem2操作物理地址 (269)
11.8 时间测量 (270)
11.9 善于使用开源项目 (270)
本章小结 (271)
第12章 底层驱动规划与管理探索 (272)
12.1 底层驱动规划探索 (272)
12.1.1 设计理念概述 (272)
12.1.2 底层平台软件设计 (273)
12.1.3 底层平台软件管理规则 (276)
12.1.4 独立驱动模块的版本管理 (276)
12.1.5 提供最基本的系统 (278)
12.1.6 驱动开发注意事项 (278)
12.1.7 版本库 (279)
12.1.8 平台版本构建发布 (282)
12.2 研发管理 (283)
12.2.1 嵌入式软件研发管理畅想 (284)
12.2.2 嵌入式软件V字形开发模式 (285)
12.3 软件开发文档 (286)
12.3.1 可行性分析报告 (286)
12.3.2 嵌入式软件系统设计方案文档 (289)
12.3.3 嵌入式软件概要设计 (290)
12.3.4 嵌入式软件详细设计 (293)
12.3.5 案例分析 (294)
本章小结 (295)
第13章 Linux设备驱动编程规范 (296)
13.1 基本原则 (296)
13.2 布局 (297)
13.3 基本格式 (299)
13.4 对齐 (300)
13.5 空行空格 (301)
13.6 注释 (301)
13.7 命名 (302)
13.8 函数 (302)
13.9 可靠性 (303)
13.10 其他 (303)
本章小结 (305)
参考文献 (306)
猜您喜欢