新書推薦:
《
大模型推荐系统:算法原理、代码实战与案例分析
》
售價:HK$
97.9
《
逆风翻盘 危机时代的亿万赢家 在充满危机与风险的世界里,学会与之共舞并找到致富与生存之道
》
售價:HK$
137.5
《
工业互联网导论
》
售價:HK$
97.9
《
木偶的恨意(法国悬念大师米歇尔普西悬疑新作)
》
售價:HK$
64.9
《
孤独传:一种现代情感的历史
》
售價:HK$
85.8
《
家、金钱和孩子
》
售價:HK$
64.9
《
形而上学与测量
》
售價:HK$
74.8
《
世界航母、舰载机图鉴 【日】坂本明
》
售價:HK$
74.8
|
編輯推薦: |
一线研发实战经验积累,所有技巧及讲解使用的工具都可以直接应用到实际开发工作中。
采用模板的方式对分散的各种驱动知识点进行讲解,所有模板都可以直接引用。
对每个知识点都提供实际案例,从模块的原理介绍,到系统层次的分析,图文并茂,分析透彻。
提供大量的驱动例程,读者可以直接运行调试,快速应用于实际开发中。
|
內容簡介: |
本书从实用的角度对嵌入式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 IO端口 (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 readwrite设备方法 (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 中断例程之二:AD转换驱动 (96)
5.5 底半部:tasklet、工作队列 (104)
5.6 时间管理 (106)
本章小结 (107)
第6章 设备高级特性 (108)
6.1 字符设备file_operations的高级特性 (108)
6.2 Linux设备驱动的IO模型 (109)
6.2.1 同步阻塞IO (109)
6.2.2 同步非阻塞IO (109)
6.2.3 异步阻塞IO (110)
6.2.4 异步非阻塞IO (110)
6.2.5 异步通知 (110)
6.2.6 同步阻塞型IO的实现:建立在等待队列的基础上 (117)
6.2.7 异步阻塞型IO的实现:基于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)
|
內容試閱:
|
前 言
一、行业背景
嵌入式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。
编 著 者
|
|