内容简介
本书从实用的角度对嵌入式Linux驱动设计开发从理论到实践做了比较深入的介绍,以Mini2440开发板为基础,对各种常见驱动开发进行模板化设计训练,各种模板可以直接应用到实际项目开发中,其中的一线研发技巧和案例分析可以供专业特训和广大嵌入式Linux开发者实战使用。
本书共分为13章,书中介绍的各种开发技巧对实际应用有很大的借鉴意义,在各个知识点介绍中穿插实际项目的经验分享,包括实际研发的管理经验介绍,对驱动开发初学者和实际设计开发人员有很大益处,也可作为一线研发公司的岗前培训教程。
本书重点在于内核驱动的讲解,以及模板式开发的训练,力求揭晓各种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
摘要与插图
前 言一、行业背景
嵌入式Linux驱动开发涉及的知识点比较多,要求开发者掌握的技能也比较多,且内核知识点比较分散,对于初学者来说门槛比较高,而嵌入式Linux在各行各业中已被广泛应用,在物联网、通信行业、航空航天、消费电子、汽车电子等行业中急需掌握嵌入式Linux软件开发的研发人员。近年来,随着嵌入式应用越来越广泛,嵌入式Linux开发变得更加复杂,嵌入式Linux驱动开发已经成为嵌入式应用领域的一个重大课题。
二、关于本书
本书大部分内容基于专业培训机构特训的讲稿。在专业培训提倡的嵌入式Linux驱动的模板式教学中取得了很好的效果,在此之上结合一线研发经验对驱动开发进行战略性指导,其中很多关键点是作者花了很长时间实实在在整理出来的,旨在揭晓嵌入式Linux驱动中的各种机制,达到知其然且知其所以然的目的。
本书各章内容说明如下。
第1章为驱动总论,是驱动开发在高层次上的介绍。
第2章介绍的内核编程及基础知识点是驱动开发的基础,对驱动开发涉及的Linux内核中的各个知识点进行介绍,旨在扫清对Linux内核阅读的障碍。
第3章介绍驱动模块开发,涉及各种模块移植中常见的设备方法,其中各个模板可以直接应用到实际研发中。
第4章结合Linux操作系统讲解互斥机制在各种情况下的使用,重点分析各种机制的使用注意事项。
第5章重点介绍Linux中断的上下部机制及Linux提供的各种接口,强调中断程序设计的基本理念及设计手段。
第6章介绍Linux驱动中字符设备驱动的设备方法。
第7章在Linux子系统的层面上介绍各种设备驱动。
第8章重点介绍如何使用虚拟文件系统,这些实用技巧是一线研发的经验总结。
第9章对设备驱动模型各个元素进行讲解,并介绍如何一步步手动建立设备驱动模型模板。
第 10 章手把手带领读者建立本的文件系统,并制作各种常见的文件系统,其中穿插介绍各种实用技巧及实际研发工具。
第11章介绍一线研发人员使用的开发调试技巧,重点强调实用。
第12章结合V字形开发模型在嵌入式Linux驱动开发中的具体实施进行总结。
第13章介绍嵌入式Linux设备驱动编程规范。
本书附带光盘一张,包含书中例程的源代码、目标文件,以及各种相关的工具,光盘按照书中各个知识点建立相应文件夹存放。其中各个知识点配套的例程可以直接在Mini2440开发板上运行。驱动相应例程含有相应的例程配套使用。各个例程也作为相应Linux驱动开发的模版,可以直接修改并应用到具体项目开发中。
三、本书
一线研发实战经验积累,所有技巧及讲解使用的工具都可以直接应用到实际开发工作中。
采用模板的方式对分散的各种驱动知识点进行讲解,所有模板都可以直接引用。
对每个知识点都提供实际案例,从模块的原理介绍,到系统层次的分析,图文并茂,力求分析透彻。
提供了大量的驱动例程,这些例程可以快速应用在实际开发中,读者可以直接运行调试。
结合实际研发工作对开发过程中的思考进行总结,重在实用。
四、作者介绍
本书由林锡龙编著,编著者在写作过程中查阅了大量开源工具及互联网上的资料,对各种资料的作者不能一一列举,在此表示谢意。
由于时间仓促,书中程序和图表较多,错误之处在所难免,请广大读者批评指正。作者电子邮箱:wlxl_1204@163.com。
编 著 者