标题：嵌入式Linux驱动程序和系统开发实例精讲
图书信息
作　者：罗苑棠 编著 
出 版 社： 电子工业出版社
出版时间： 2009-1-1
页　数：492页
开　本： 16开
ISBN 9787121079368
分类： 图书 >> 计算机/操作系统>>嵌入式Linux
定价：￥59.00元（含光盘1张）
宣传语
实例丰富 即学即用
内 容 简 介
本书是《嵌入式Linux应用系统开发实例精讲》的改版。全书通过大量实例精讲的形式，详细介绍了嵌入式Linux驱动程序与系统开发的方法与流程。全书分3篇共19章，第1篇为基础知识篇，介绍了Linux的移植、开发环境平台、Linux程序设计基础及常用开发工具，引导读者技术入门。第2篇为Linux驱动程序开发与实例篇，结合6个实际案例阐述了网卡驱动、声卡驱动、显卡驱动、USB驱动、闪存Flash驱动的开发原理技术和应用。第3篇为Linux系统开发实例篇，安排了8个实际应用系统实例，涵盖工业设备、视频处理、指纹识别、网络传输通信、摄像监控、移动校园系统等嵌入式热门领域，实战和商业价值高，利于读者举一反三，快速掌握Linux系统设计的流程，提高实际设计能力。
本书配有光盘1张，包含了全书所有实例的硬件原理图和程序源代码，方便读者学习和使用。本书适合计算机、自动化、电子及通信等相关专业的大学生，以及从事Linux开发的科研人员使用。
丛书说明
工程技术的电子化、集成化和系统化促进了电子工程技术的发展，同时也促进了电子工程技术在社会各行业中的广泛应用，从近年的人才招聘市场来看，电子工程师的人才需求更是一路走高。
电子工程师如此紧俏，除需求不断走高，人才供不应求外，另一重要原因则是电子工程师的门槛相对而言比较高，这个高门槛则来自于工程师的“经验”和“实践”！
因此，为了满足读者学习和工作需要，解决各种工作中的专业问题，我们紧紧围绕“经验”和“实践”，精心策划组织了此套丛书。
1．丛书范围
现代电子科学技术的一个特点是多学科交叉，因此，工程师应当了解、掌握两门以上的相关学科，知识既精深又广博是优秀的工程师成长为某领域专家的重要标志。本丛书内容涉及软件开发、研发电子及嵌入式项目开发等，包括单片机、USB接口、ARM、CPLD/FPGA、DSP和移动通信系统等。
2．读者对象
本套书面向各领域的初、中级用户，具体为高校计算机、电子信息、通信工程、自动化控制专业在校大学生，以及从事电子开发和应用行业的科研人员。
3．内容组织形式
本套书紧紧围绕“经验”和“实践”，首先介绍一些相关的基础知识，然后根据不同的模块或应用领域，分篇安排应用程序实例的精讲。基础知识用来为一些初级读者打下一定的知识功底；基础好一点的读者则可以跳过这一部分，直接进入实例的学习。
4．实例特色
在应用实例的安排上，着重突出“应用”和“实用”两个基本原则，安排具有代表性、技术领先性，以及应用广泛的典型实例，让读者学习借鉴。这些实例是从作者多年程序开发项目中挑选出来的，也是经验的归纳与总结。
在应用实例的讲解上，既介绍了设计原理、基本步骤和流程，也穿插了一些经验、技巧与注意事项。特别在程序设计思路上，在决定项目开发的质量和成功与否的细节上，尽可能地用简洁的语言来清晰阐述大众易于理解的概念和思想；同时，程序代码部分做了很详细的中文注释，有利于读者举一反三，快速应用和提高。
5．光盘内容
本套书的光盘中包含了丰富的实例原图文件和程序源代码，读者稍加修改便可应用于自己的工作中或者完成自己的课题（毕业设计），物超所值。读者使用之前，最好先将光盘内容全部复制到电脑硬盘中，以便于以后可以直接调用，而不需要反复使用光盘，提高操作速度和学习效率。
6．学习指南
对于有一定基础的读者，建议直接从实例部分入手，边看边上机练习，这样印象会比较深，效果更好。基础差一点的读者请先详细学习书中基础部分的理论知识，然后再进行应用实例的学习。在学习中，尽量做到反复理解和演练，以达到融会贯通、举一反三的功效；特别希望尽量和自己的工作设计联系起来，以达到“即学即会，学以致用”的最大化境界。
本套丛书主要偏重于实用性，具有很强的工程实践指导性。期望读者在学习中顺利、如意！
前 言
Linux是一套免费使用和自由传播的类UNIX操作系统，这个系统是由世界各地成千上万的程序员设计和实现的。它以高效性和灵活性著称，并且能够在PC上实现全部的UNIX特性，具有多任务、多用户的能力。Linux现在受到了广大计算机爱好者的喜爱，原因主要有两个：一是Linux属于自由软件，用户不用支付任何费用就可以获得它及其源代码，并且可以根据自己的需要进行必要的修改；另一个原因是它具有UNIX的全部功能。
随着Linux在我国政府、金融、电信、消费电子等行业的广泛应用，企业对Linux人才的需求也开始持续升温。目前IT业内许多著名大企业都有急剧扩招Linux人才的倾向。巨大的人才需求将使更多的人参与到Linux学习的行列中来。
Linux应用领域比较多，比较常用的有服务器配置与应用、驱动设备开发、嵌入式系统开发等。目前市场上虽存在一些Linux驱动程序与嵌入式系统设计图书，但大多以介绍基础理论为主，缺乏商业应用案例的实践指导。本书就是为了弥补这种不足而精心组织编写的。
本书内容
全书以理论为辅、实践为主，重点以典型实例的形式，详细介绍嵌入式Linux驱动程序与系统开发的思路、方法与实际应用案例。全书分3篇共19章，具体内容如下：
第1~4章为基础知识篇，主要讲述了嵌入式基础入门、Linux环境开发平台、C程序设计基础、Linux常用开发工具。通过本部分学习，初级读者可以具备一定的Linux程序设计功底；基础好一点的读者则可以跳过这一部分。
第5~10章为Linux驱动程序开发与实例篇，结合6个实际案例阐述了网卡驱动、声卡驱动、显卡驱动、USB驱动、闪存Flash驱动的开发原理技术和应用。
第11~19篇为Linux系统开发实例篇，安排了8个实际应用系统实例，涵盖工业设备、视频处理、指纹识别、网络传输通信、摄像监控、移动校园系统等领域，这些实例具有代表性、技术领先性、应用广泛性及热门性的特点，全部调试通过并进入商品化，是作者多年开发经验的归纳与总结。
本书特色
与同类型书相比，本书主要具备以下一些特色。
（1）整体讲解思路：首先简要讲述了Linux嵌入式系统开发的环境平台、程序基础和常用开发工具，然后是驱动程序与系统开发典型实例的介绍，并穿插了一些经验、技巧与注意事项，符合读者循序渐进的学习过程。
（2）包括GUI、QT图形工具、驱动程序开发及系统实例的介绍，使本书在内容上更加完美、全面。
（3）本书6个驱动程序实例和8个应用系统实例，全部典型实用，涉及Linux开发的诸多热门与核心技术，工程实战价值高。
（4）本书不但提供了程序设计的详细思路与流程，而且对实例的程序代码做了详细注释，利于读者理解和巩固知识点，学会举一反三。
（5）光盘中包含了丰富的实例硬件电路图文件和程序源代码，读者稍加修改，便可应用于自己的工作中或者完成自己的课题设计，物超所值。
 光盘的内容说明 该光盘为实例素材文件，按照章节序号来组织，每章包括电路图、程序代码两部分内容。其中，“电路图”文件夹中的内容为各章的电路图，多用Protel软件制作。
 光盘的使用说明 光盘中的程序需要采用C语言的编译软件打开阅读，也可以使用“UltraEdit”等软件打开阅读或者编辑。
 系统要求 该光盘运行只需一般的PC就可以。系统配置推荐为256MB以上内存，1280×1024分辨率，32MB以上显存。
本书读者对象为计算机、电子信息及相关专业的在校大学生，还有从事Linux嵌入式开发的初、中级设计人员。
本书主要由罗苑棠编写。另外参加编写的人员还有唐清善、邱宝良、周克足、刘 斌、李亚捷、李永怀、李宁宇、刘伟捷、黄小欢、严剑忠、黄小宽、李彦超、付军鹏、张广安、贾素龙、王艳波、金平、徐春林、谢正义、郑贞平、张小红等。他们在资料收集、整理和技术支持方面做了大量的工作，在此一并向他们表示感谢！
由于时间仓促，再加之作者的水平有限，书中难免存在一些不足之处，欢迎广大读者批评和指正，联系方式jsj@phei.com.cn。
编 者 
2008年11月
目 录
第1篇 Linux基础知识
第1章 嵌入式基础入门 2
1.1 嵌入式操作系统简介 2
1.1.1 嵌入式系统的基本概念 2
1.1.2 嵌入式系统的内核介绍 3
1.1.3 嵌入式系统的应用领域 4
1.2 Linux操作系统概述 5
1.2.1 嵌入式Linux发展现状 5
1.2.2 Linux相关的常用术语 6
1.3 Linux操作系统的移植 8
1.3.1 BootLoader技术详解 8
1.3.2 Linux内核基本结构 17
1.3.3 移植Linux操作系统 28
1.4 本章总结 32
第 2章 Linux系统开发环境平台 33
2.1 进程/线程管理 33
2.1.1 进程/线程的概念 33
2.1.2 进程基本操作 37
2.1.3 进程通信与同步 49
2.1.4 线程基本操作 57
2.1.5 简单的多线程编程 59
2.2 文件系统结构和类型 62
2.2.1 FAT文件系统 62
2.2.2 RAMFS内核文件系统 66
2.2.3 JFFS与YAFFS文件系统 68
2.2.4 EXT2/EXT3文件系统 71
2.2.5 /proc文件系统 74
2.2.6 Linux文件操作函数 75
2.3 存储管理 79
2.3.1 MTD内存管理 79
2.3.2 Linux内存管理 83
2.4 设备管理 84
2.4.1 概述 84
2.4.2 字符设备与块设备 84
2.4.3 主设备号和次设备号 87
2.5 本章总结 88
第3章 嵌入式Linux程序设计基础 89
3.1 建立嵌入式Linux交叉编译环境 89
3.1.1 编译环境概述 89
3.1.2 建立交叉编译环境流程 92
3.2 工程管理器make 97
3.2.1 make概述 97
3.2.2 Makfile文件书写规则 101
3.3 Linux C/C++程序设计 104
3.3.1 C/C++程序结构 104
3.3.2 C/C++数据类型 107
3.3.3 表达式/语句、函数 108
3.3.4 C/C++设计注意事项 111
3.4 Linux汇编程序设计 117
3.4.1 Linux汇编语法格式 118
3.4.2 汇编程序实例 119
3.5 Linux Shell语言编程 120
3.5.1 Shell环境变量及配置文件 121
3.5.2 Shell编程实例 123
3.6 Linux Perl语言编程 124
3.6.1 Perl基本程序 124
3.6.2 Perl变量 125
3.6.3 文件句柄和文件操作 128
3.6.4 循环结构 129
3.6.5 条件结构 130
3.7 本章总结 131
第4章 Linux常用开发工具 132
4.1 GCC编译器 132
4.1.1 GCC版本信息 132
4.1.2 GCC目录结构 132
4.1.3 GCC执行过程 133
4.1.4 GCC的基本用法和选项 134
4.1.5 g++ 134
4.2 gdb调试器 135
4.2.1 基本用法和选项 135
4.2.2 gdb常用命令 135
4.3 Linux汇编工具 136
4.3.1 汇编器 136
4.3.2 链接器 136
4.3.3 调试器 137
4.3.4 系统调用 137
4.3.5 命令行参数 137
4.3.6 GCC内联汇编 138
4.4 Linux调试工具 139
4.4.1 JTAG调试工具 139
4.4.2 kgdb内核调试环境 144
4.5 Linux图形开发工具 149
4.5.1 GUI图形界面开发 149
4.5.2 GTK图形开发工具 157
4.5.3 QT图形开发工具 161
4.6 本章总结 167
第2篇 Linux驱动程序开发与实例
第5章 Linux设备驱动基础 170
5.1 驱动程序基本概念 170
5.1.1 驱动程序与应用程序的区别 170
5.1.2 内核版本与编译器的版本依赖 171
5.2 设备驱动模块概述 171
5.2.1 模块的基本概念 171
5.2.2 模块的初始化和退出 172
5.2.3 Linux内核模块加载 174
5.3 Linux设备驱动结构分析 176
5.3.1 内核和用户接口 176
5.3.2 inode节点 177
5.3.3 File结构 178
5.4 常用接口函数介绍 181
5.5 驱动程序的调试 187
5.6 本章总结 189
第6章 网卡驱动程序开发 190
6.1 网卡概述 190
6.2 RTL8193网卡驱动 190
6.2.1 网卡驱动的初始化 191
6.2.2 网卡数据收发 197
6.3 典型实例——Ralink无线网卡驱动开发 198
6.3.1 Ralink无线网卡 198
6.3.2 802.11无线通信协议的选用 199
6.3.3 设备驱动关键数据结构 200
6.3.4 rt2500无线网卡驱动分析 202
6.3.5 rt2500程序源代码 207
6.4 本章总结 215
第7章 显卡驱动程序开发 216
7.1 显卡驱动概述 216
7.1.1 Linux framebuffer 216
7.1.2 帧缓冲设备数据结构 220
7.2 典型实例——显卡Framebuffer驱动实现 225
7.2.1 Framebuffer驱动框架程序 225
7.2.2 NVDIA显卡设备驱动文件 231
7.3 本章总结 233
第8章 声卡驱动程序开发 234
8.1 声卡驱动概述 234
8.2 OSS声卡驱动 234
8.3 ALSA声卡驱动 235
8.4 典型实例——AC97声卡驱动实现 237
8.4.1 AC97驱动分析 237
8.4.2 Realtek声卡驱动配置 241
8.5 本章总结 243
第9章 USB驱动程序开发 244
9.1 USB设备驱动概述 244
9.2 USB驱动设备示例 245
9.2.1 Linux驱动程序概述 245
9.2.2 驱动程序分析 246
9.3 典型实例——单片机的主从通信实例 253
9.3.1 主从通信介绍 253
9.3.2 USB设备驱动程序 254
9.3.3 主机程序源代码 260
9.4 本章总结 261
第10章 闪存Flash驱动程序开发 262
10.1 Flash闪存基础 262
10.2 Flash MTD技术 264
10.3 典型实例1——NAND Flash驱动实例 265
10.3.1 NAND Flash驱动设备 265
10.3.2 NAND Flash驱动源代码 266
10.4 典型实例2——NOR Flash驱动实例 270
10.4.1 芯片驱动与MTD原始设备 270
10.4.2 NOR Flash驱动分析 270
10.4.3 NOR Flash驱动源代码 274
10.5 本章总结 276
第3篇 Linux系统开发实例
第11章 嵌入式系统开发的模式与流程 278
11.1 嵌入式系统的结构 278
11.1.1 嵌入式系统的硬件架构 278
11.1.2 嵌入式系统的软件结构 278
11.2 嵌入式开发的模式及流程 279
11.2.1 嵌入式系统开发模式 279
11.2.2 嵌入式系统开发流程 280
11.3 本章总结 282
第12章 工业温度监控设备开发实例 283
12.1 应用环境与硬件设计概要 283
12.1.1 嵌入式Linux在工业控制领域的应用 283
12.1.2 工控串行通信协议标准 286
12.2 相关开发技术——异步串行通信接口 288
12.2.1 异步串行通信标准 288
12.2.2 设置串口控制信号 290
12.2.3 读入串口控制信号 291
12.2.4 文件Open()系统调用 292
12.3 实例——基于DS1820的实时温度监控系统 292
12.3.1 系统基本结构 293
12.3.2 系统工作流程 296
12.3.3 系统模块源代码实现 298
12.4 本章总结 306
第13章 实时视频采集系统开发实例 307
13.1 应用环境与硬件设计概要 307
13.2 相关开发技术 308
13.2.1 视频图像压缩技术 308
13.2.2 视频采集驱动 310
13.2.3 视频驱动加载运行 313
13.3 实例——基于MV86S02实时视频采集系统设计 313
13.3.1 系统基本结构 313
13.3.2 系统工作流程 316
13.3.3 系统模块源代码实现 319
13.3.4 视频数据比较及分析 335
13.4 本章总结 336
第14章 指纹识别门禁系统开发实例 337
14.1 应用环境与硬件设计概要 338
14.2 相关开发技术 340
14.2.1 指纹识别原理 340
14.2.2 设备驱动编写框架 344
14.2.3 指纹芯片驱动 346
14.3 实例——基于ARM Linux的指纹识别门禁系统 347
14.3.1 系统基本结构 347
14.3.2 系统工作流程 349
14.3.3 系统模块源代码实现 350
14.4 本章总结 360
第15章 基于RTL8019的以太网应用系统开发实例 361
15.1 以太网应用技术概述 361
15.2 相关开发技术 362
15.2.1 基于RTL8019的以太网帧传输原理 362
15.2.2 RTL8019的初始化 363
15.2.3 RTL8019驱动程序的框架 364
15.2.4 数据结构和函数 365
15.2.5 RTL8109驱动程序的加载 368
15.3 实例——基于RTL8019的以太网应用系统设计 368
15.3.1 系统基本结构 368
15.3.2 系统工作流程 371
15.3.3 系统模块源代码实现 372
15.3.4 系统调试 380
15.4 本章总结 381
第16章 无线网络数据传输系统开发实例 382
16.1 无线网络传输系统简介 382
16.2 相关开发技术 383
16.2.1 无线网络接入技术 383
16.2.2 基于PCMCIA的无线网卡接口 385
16.2.3 PCMCIA驱动程序 386
16.3 实例——基于PCMCIA的
16.3 无线网络嵌入式前端系统设计 387
16.3.1 系统基本结构 387
16.3.2 系统工作流程 389
16.3.3 系统模块源代码实现 391
16.3.4 系统调试 398
16.4 本章总结 398
第17章 基于PDIUSBD12的数据传输系统实例 399
17.1 USB应用环境与硬件设计概要 400
17.2 相关开发技术——USB系统与总线驱动 401
17.2.1 USB系统组成 401
17.2.2 USB Host总线驱动 402
17.2.3 USB Device总线驱动 403
17.3 实例——基于PDIUSBD12的数据传输设计 406
17.3.1 系统基本结构 406
17.3.2 系统工作流程 412
17.3.3 系统模块源代码实现 412
17.4 本章总结 424
第18章 家庭安全监控系统设计实例 425
18.1 应用环境与硬件设计概要 425
18.1.1 系统功能和组成 425
18.1.2 系统模块功能描述 426
18.2 系统硬件结构 430
18.2.1 Linux客户端系统硬件结构 430
18.2.2 传感器系统硬件结构 433
18.3 系统软件结构 435
18.3.1 Linux客户端系统软件结构 435
18.3.2 传感器系统软件结构 438
18.4 Linux客户端系统设计实现 440
18.4.1 系统数据结构设计 440
18.4.2 通信模块设计说明 441
18.4.3 显示模块设计说明 442
18.4.4 用户管理模块设计说明 443
18.4.5 系统设置模块设计说明 445
18.4.6 客户端主要代码与注释 445
18.5 系统主要模块设计实现 447
18.5.1 红外监控模块设计说明 447
18.5.2 报警模块（warnning） 448
18.5.3 触发监控模块 449
18.5.4 管理模块 450
18.5.5 主要代码与注释 453
18.6 本章总结 459
第19章 移动校园系统设计实例 460
19.1 应用环境与硬件设计概要 460
19.1.1 系统功能和组成 460
19.1.2 系统模块功能和软件图 460
19.2 系统硬件结构 462
19.3 系统软件结构 463
19.3.1 软件整体结构 463
19.3.2 软件模块结构 464
19.3.3 接口设计 467
19.3.4 运行过程设计 468
19.3.5 系统数据结构设计 469
19.3.6 搭建开发环境 470
19.4 系统模块程序代码 472
19.4.1 主函数 472
19.4.2 Syllabus课表模块 472
19.4.3 BBS论坛模块 474
19.4.4 Map地图模块 476
19.4.5 Message系统消息模块 478
19.5 本章总结 478