王桐等编著的《零点起步——嵌入式Linux编程入门与开发实例》是集C语言程序设计、Linux编程环境讲解及嵌入式开发于一体的书籍。为了使读者迅速使用嵌入式Linux C进行系统开发,本书每个知识点都通过典型的例题来说明其功能和用法,并给出重要的设置选项含义。通过学习本书,读者可以快速学会在Linux环境下进行C语言编程,掌握其中的编程方法和技巧,从而实现Linux环境下C语言编程的入门和提高。
本书的作者都是科研和实际工作的教师和博士研究生,有着丰富的教学和编著经验。本书在内容编排上,按照读者学习的一般规律,结合大量实例讲解操作步骤,使读者快速熟悉Linux操作系统、嵌入式开发环境,熟练掌握Linux C的使用。
王桐等编著的《零点起步——嵌入式Linux编程入门与开发实例》共分15章,分别介绍了嵌入式系统基础、文本编辑器的使用、构建嵌入式Linux开发环境、Linux常用命令、编译与调试、图形界面应用程序开发、嵌入式文件系统与存储技术、Linux设备驱动程序开发、进程控制、线程控制、嵌入式车载终端的设计、嵌入式BOA服务器的构建、嵌入式VNC远程控制的实现、ARM Linux指纹门禁系统和基于ARM Linux的家庭安全监控系统设计。
本书不仅有详细的理论基础知识介绍,还有大量的开发案例以供参考,可读性和实用性强,适合于没有或者缺乏嵌入式Linux程序设计经验的初学者作为嵌入式Linux C语言开发的自学教材,同时也适合于已掌握C语言基础并想学习嵌入式开发的读者。
《零点起步——嵌入式Linux编程入门与开发实例》可作为各类学校的教学用书,也可作为工程技术人员的参考书。
前言
第1章 嵌入式系统基础 1
1.1 嵌入式系统概述 1
1.2 嵌入式操作系统 3
1.3 Linux 操作系统 5
1.3.1 Linux的发展历史 5
1.3.2 Linux的发行版本 5
1.3.3 Linux系统的特点和组成 7
1.4 ARM处理器平台 9
1.4.1 ARM处理器简介 9
1.4.2 ARM处理器的体系结构 10
1.4.3 ARM微处理器系列 11
1.4.4 ARM微处理器的应用领域及特点 15
1.4.5 ARM微处理器的结构 16
1.4.6 ARM微处理器的应用选型 17
1.5 嵌入式系统开发 18
1.5.1 嵌入式系统的开发流程 18
1.5.2 Linux程序设计流程 19
1.6 思考与练习 20
第2章 文本编辑器的使用 21
2.1 Vi编辑器 21
2.1.1 Vi的基本模式 21
2.1.2 Vi的基本操作 22
2.2 Vim编辑器 25
2.3 Emacs编辑器 31
2.3.1 Emacs的启动与退出 31
2.3.2 Emacs的基本编辑 32
2.3.3 Emacs的C模式 34
2.3.4 Emacs的Shell模式 34
2.4 gedit编辑器 35
2.5 思考与练习 36
第3章 构建嵌入式Linux开发环境 37
3.1 嵌入式系统开发环境的构建 37
3.2 移植U-Boot 40
3.2.1 Bootloader简介 40
3.2.2 Bootloader的启动流程 41
3.2.3 U-Boot的分析与移植 49
3.2.4 VIVI 分析 52
3.3 嵌入式Linux操作系统内核编译 53
3.3.1 Linux 内核结构 53
3.3.2 内核的配置 55
3.3.3 内核编译的过程 56
3.3.4 内核的移植 57
3.4 思考与练习 58
第4章 Linux常用命令 59
4.1 目录命令 59
4.1.1 ls 59
4.1.2 cd 62
4.1.3 pwd 63
4.1.4 mkdir 63
4.1.5 rmdir 64
4.2 文件命令 65
4.2.1 cp 66
4.2.2 rm 68
4.2.3 mv 69
4.2.4 cat 71
4.2.5 chmod 72
4.2.6 find 74
4.2.7 grep 77
4.2.8 sort 79
4.3 思考与练习 80
第5章 编译与调试 81
5.1 嵌入式Linux编译器GCC 81
5.1.1 GCC编译分析 82
5.1.2 GCC编译选项分析 89
5.1.3 库函数的使用方法 92
5.2 调试工具GDB 95
5.2.1 GDB使用实例 96
5.2.2 GDB的帮助 99
5.2.3 设置/删除断点 100
5.2.4 各种相关命令 100
5.3 Make工程管理器 102
5.3.1 Makefile文件的构成 103
5.3.2 Makefile变量 105
5.3.3 Make管理器的使用 106
5.4 思考与练习 108
第6章 图形界面应用程序开发 109
6.1 嵌入式图形用户界面 109
6.2 Linux环境下几种主流的GUI 110
6.2.1 MiniGUI 110
6.2.2 Qt/Embedded 112
6.2.3 MicroWindows 113
6.2.4 OpenGUI 114
6.2.5 GTK+ 114
6.3 基于MiniGUI的图形界面开发 115
6.3.1 MiniGUI程序框架 116
6.3.2 MiniGUI中的窗口与消息 116
6.3.3 菜单 124
6.3.4 键盘与鼠标 124
6.3.5 对话框 125
6.3.6 常用控件 126
6.4 思考与练习 134
第7章 嵌入式文件系统与存储技术 135
7.1 嵌入式文件系统的功能和特点 135
7.2 Linux操作系统支持的常见文件系统 136
7.3 Linux文件结构 140
7.3.1 Linux文件系统 142
7.3.2 Linux文件类型 143
7.3.3 Linux文件的访问权限控制 145
7.4 Flash存储技术 147
7.4.1 Flash的类型 147
7.4.2 Flash的技术特点 147
7.4.3 NOR Flash与NAND Flash的区别 148
7.5 NOR Flash与JFFS2文件系统 150
7.5.1 JFFS2原理 150
7.5.2 JFFS2文件系统在Linux中的实现 154
7.6 NAND Flash与YAFFS文件系统 155
7.6.1 YAFFS原理 156
7.6.2 YAFFS文件系统在Linux中的实现 159
7.7 思考与练习 160
第8章 Linux设备驱动程序开发 161
8.1 Linux设备驱动程序概述 161
8.2 Linux设备驱动程序与内核的关系 163
8.3 Linux设备驱动程序框架 164
8.4 设备访问方式及实现 166
8.4.1 查询方式 166
8.4.2 中断方式 167
8.4.3 DMA方式 168
8.5 字符设备驱动 169
8.6 块设备驱动 174
8.6.1 块设备驱动简介 174
8.6.2 块设备相关结构体 175
8.7 网络设备驱动 179
8.7.1 网络设备简介 179
8.7.2 网络设备的运行机制 180
8.7.3 sk_buff数据结构 181
8.7.4 数据包的发送与接收 182
8.7.5 网络设备驱动程序的加载 183
8.7.6 DM9000网卡驱动程序分析 184
8.8 思考与练习 188
第9章 进程控制 189
9.1 Linux进程 189
9.1.1 Linux进程简介 189
9.1.2 Linux进程调度 193
9.1.3 进程的内存映像 198
9.2 进程控制 198
9.2.1 创建进程 199
9.2.2 创建守护进程 200
9.2.3 进程退出 204
9.2.4 改变进程的优先级 205
9.2.5 执行新程序 206
9.2.6 等待进程结束 207
9.3 进程间通信 209
9.3.1 管道 210
9.3.2 有名管道 211
9.3.3 消息队列 214
9.3.4 信号量 217
9.3.5 共享内存 219
9.4 思考与练习 224
第10章 线程控制 226
10.1 Linux线程 226
10.1.1 线程和进程的关系 227
10.1.2 线程的分类 228
10.2 创建线程 229
10.3 线程的属性 231
10.4 线程等待终止 235
10.5 私有数据 236
10.6 线程同步 236
10.6.1 互斥锁 237
10.6.2 条件变量 240
10.6.3 信号量 243
10.7 出错处理 244
10.7.1 错误码 245
10.7.2 出错处理相关函数 245
10.8 思考与练习 247
第11章 嵌入式车载终端的设计 248
11.1 车载终端的硬件平台 248
11.1.1 S3C2440A微处理器 248
11.1.2 车辆监控系统 249
11.1.3 存储单元 250
11.1.4 LCD 250
11.1.5 数字音频接口 250
11.2 嵌入式开发环境的建立 251
11.3 嵌入式车载终端软件的开发 252
11.3.1 GPRS通信模块 252
11.3.2 温度自动调节系统 253
11.3.3 可视倒车功能的实现 257
11.3.4 车载语音电话 263
第12章 嵌入式BOA服务器的构建 269
12.1 嵌入式Web服务器 269
12.2 嵌入式Linux系统移植 270
12.2.1 开发环境的构建 270
12.2.2 Boot Loader分析移植 271
12.2.3 Linux内核移植 272
12.2.4 构建根文件系统 274
12.3 嵌入式Linux的BOA服务器移植 276
12.3.1 BOA服务器 276
12.3.2 CGIC库的移植 281
12.3.3 HTML模板的制作 283
12.3.4 CGI程序的开发 283
第13章 嵌入式VNC远程控制的实现 291
13.1 远程控制及VNC 291
13.2 需求分析 292
13.2.1 软件需求分析 292
13.2.2 硬件需求分析 293
13.3 嵌入式Linux系统移植 294
13.3.1 交叉开发环境的构建 294
13.3.2 Bootloader的移植 297
13.3.3 Linux内核的移植 300
13.3.4 Linux根文件系统的构建 302
13.4 Tiny-X及应用程序移植 307
13.4.1 Linux X图形系统和嵌入式X 307
13.4.2 配置编译Tiny-X 307
13.4.3 编译Matchbox 312
13.4.4 编译VNC Viewer 312
13.4.5 编译Xterm 313
13.5 RFB协议简析及文件系统的裁剪 313
13.5.1 RFB协议简析 314
13.5.2 文件系统的裁剪 315
第14章 ARM Linux 指纹门禁系统 316
14.1 指纹识别技术概述 316
14.2 指纹识别系统的原理 318
14.3 系统硬件结构 320
14.4 指纹采集芯片fps200 321
14.5 Linux操作系统移植 322
14.5.1 BootLoader移植 323
14.5.2 Linux内核移植到S3C2410 324
14.5.3 加载指纹芯片驱动程序 326
14.5.4 加载文件系统 326
14.6 系统软件设计 328
14.6.1 系统的初始化 328
14.6.2 指纹采集与处理 329
14.6.3 指纹识别算法的实现 331
第15章 基于ARM Linux的家庭安全监控系统设计 336
15.1 系统的功能和组成 336
15.1.1 S3C2410简介 337
15.1.2 无线红外探头RD-HW14G 339
15.1.3 系统模块功能描述 339
15.2 软件平台与开发工具 340
15.2.1 Linux系统 341
15.2.2 Shell脚本 341
15.2.3 GCC编译器 342
15.2.4 Make项目管理器 342
15.2.5 Socket编程接口 343
15.3 基于嵌入式平台的网络服务器 343
15.3.1 嵌入式Web服务器 344
15.3.2 嵌入式视频服务器 346
15.3.3 嵌入式SSH服务器 348
15.4 视频监控系统的实现 350
15.4.1 基于Java的浏览器实现 350
15.4.2 Windows平台下客户端的分析和实现 351
15.5 红外监控模块的设计 355
参考文献 356