第1章 嵌入式系统基础知识 1
1.1嵌入式系统概述 1
1.1.1嵌入式系统简介 1
1.1.2嵌入式系统的组成 2
1.1.3嵌入式系统的应用领域 4
1.1.4嵌入式系统的发展趋势 5
1.2 ARM处理器平台介绍 5
1.2.1 ARM处理器简介 6
1.2.2 ARM体系结构 6
1.2.3 ARM微处理器系列 8
1.2.4 ARM处理器的应用领域和特点 11
1.3 Linux操作系统 12
1.3.1 Linux的发展历史 12
1.3.2 Linux发行版本 13
1.3.3 Linux系统的特点和组成 14
1.3.4 Linux常用命令 16
1.4嵌入式系统开发 22
本章小结 24
思考与练习 24
第2章Linux环境下C语言的开发 25
2.1 C语言简单回顾 25
2.2 Linux程序设计基础知识 26
2.2.1程序安装目录 26
2.2.2头文件 27
2.2.3库文件 27
2.3 Linux下的C语言开发环境 30
2.4嵌入式Linux C语言开发流程和开发工具 30
2.5嵌入式Linux中程序的运行原理 31
2.6 Linux程序设计的特点 33
2.7 Linux下C语言编码的风格 34
本章小结 35
思考与练习 35
第3章Bootloader 36
3.1 Bootloader的工作原理 36
3.1.1 Bootloader概述 36
3.1.2 Bootloader的启动流程 37
3.2 ViVi 42
3.2.1 ViVi的源代码结构 42
3.2.2 ViVi的启动过程 43
3.3 U-Boot 50
3.3.1 U-Boot的特点 50
3.3.2 U-Boot的目录结构 50
3.3.3 U-Boot的启动过程 51
3.3.4 U-Boot的移植 55
3.3.5 U-Boot与内核的关系 55
本章小结 61
思考与练习 61
第4章Linux环境下C语言编程基础 62
4.1 Vi编辑器 62
4.1.1 Vi的基本模式 62
4.1.2 V i的基本操作 63
4.2 Vim编辑器 65
4.2.1 Vim的启动 66
4.2.2保存与打开文件 67
4.2.3移动光标 67
4.2.4插入 68
4.2.5删除 69
4.2.6取消 69
4.2.7保存 70
4.2.8退出 70
4.3 GCC编译器 70
4.3.1 GCC编译流程分析 71
4.3.2实例:GCC编译程序 71
4.3.3实例:GCC编译多重源代码文件 77
4.3.4 GCC编译选项分析 78
4.3.5 GCC使用库函数 80
4.3.6实例:静态库的创建 81
4.4 GDB调试器 82
4.4.1 GDB调试器概述 82
4.4.2实例:GDB调试程序 83
4.5 Make工程管理器 86
4.5.1 Makeile文件的构成 87
4.5.2 Makeile变量 88
4.5.3 Make工程管理器的使用 90
本章小结 91
思考与练习 91
第5章Linux Shell编程 92
5.1什么是Shell 92
5.2 几种流行的Shell 93
5.3 bash的特点 94
5.4 Shell程序设计基础 95
5.4.1 Shell的基本语法 95
5.4.2 Shell程序的变量和参数 96
5.4.3 Shell的测试命令 100
5.4.4 Shell的条件语句 101
5.4.5 Shell的循环语句 102
5.4.6函数 104
5.4.7命令分组 104
5.4.8引号的使用方法 104
5.4.9实例:Shell菜单程序 105
5.4.10实例:自动调用ftp传输软件 106
5.5运行Shell程序的方法 107
5.6 bash的内部命令和外部命令 107
本章小结 109
思考与练习 109
第6章 创建嵌入式系统开发环境 111
6.1嵌入式系统开发环境的构建 111
6.2 Cygwin 114
6.3超级终端和minicom的配置及使用 115
6.4嵌入式Linux操作系统内核编译 116
6.4.1 Linux内核结构 116
6.4.2内核的配置 119
6.4.3内核编译的过程 120
6.4.4内核的移植 121
6.5 NFS 122
6.6 Tftp 124
本章小结 125
思考与练习 125
第7章C程序基础 126
7.1数据、运算符、表达式 126
7.1.1 C程序的结构和语法规则 126
7.1.2 C程序语句概述 126
7.1.3标识符 127
7.1.4关键字 128
7.1.5常量 128
7.1.6变量 128
7.1.7基本数据类型 129
7.1.8算术运算符、赋值运算符及其表达式 130
7.1.9关系运算符、逻辑运算符及其表达式 132
7.2数据的输入和输出 133
7.2.1数据的输出 134
7.2.2数据的输入 135
7.2.3实例:汉诺塔 136
7.3基本语句 138
7.3.1语句和复合语句 138
7.3.2条件语句 139
7.3.3实例:查找最小值 140
7.3.4循环控制 141
7.4数组 143
7.4.1一维数组 143
7.4.2二维数组 145
7.4.3字符数组和字符串 146
7.4.4实例:数值顺序输出 147
7.5函数与指针 148
7.5.1函数 149
7.5.2指针 151
7.5.3函数使用实例:数值比较 154
7.5.4指针使用实例:倒序输出 155
本章小结 156
思考与练习 157
第8章 嵌入式GUI技术 158
8.1嵌入式图形用户界面简介 158
8.2 Linux下几种主流GUI介绍 158
8.2.1紧缩的X Window系统 158
8.2.2 MiniGUI 159
8.2.3 Qt/Embedded 159
8.2.4 MicroWindows 160
8.2.5 OpenGUI 161
8.2.6 GTK+ 161
8.3基于MiniGUI的图形界面开发 162
8.3.1 MiniGUI程序框架 163
8.3.2 MiniGUI的窗口和消息 164
8.3.3实例:MiniGUI窗口编程 167
8.3.4菜单 172
8.3.5键盘与鼠标 172
8.3.6对话框 173
8.3.7常用控件 174
8.3.8实例:MiniGUI控件编程 177
本章小结 181
思考与练习 181
第9章 嵌入式文件系统与存储技术 183
9.1嵌入式文件系统的功能和特点 183
9.2 Linux常见的文件系统 184
9.3 Linux文件结构 186
9.3.1 Linux文件类型 188
9.3.2 Linux文件的访问权限控制 190
9.3.3 MTD 192
9.4 FLASH存储技术 193
9.4.1 FLASH的类型 196
9.4.2 NOR FLASH与NAND FLASH的区别 197
9.5基于FAT的嵌入式文件系统设计 198
9.5.1 FAT文件系统的组成 198
9.5.2 FAT层逻辑文件系统的总体框架 199
本章小结 202
思考与练习 202
第10章 嵌入式Linux设备驱动开发 203
10.1 Linux设备驱动开发概述 203
10.1.1设备驱动和文件系统的关系 204
10.1.2设备类型和设备号 204
10.2设备驱动模块化编程 205
10.2.1设备驱动程序原理 205
10.2.2设备访问方式及实现 207
10.2.3内核与驱动程序的关系 209
10.2.4中断处理 210
10.3 Linux字符设备驱动 211
10.3.1字符设备驱动概述 211
10.3.2实例:字符设备驱动 214
10.4块设备驱动 217
10.4.1块设备驱动简介 217
10.4.2块设备相关结构体 218
10.5网络设备驱动 223
10.5.1网络设备概述 223
10.5.2网络设备的运行机制 224
10.5.3 sk buff数据结构 225
10.5.4数据包的发送与接收 227
10.5.5网络设备驱动程序的加载 228
本章小结 229
思考与练习 229
第11章 进程 230
11.1进程概述 230
11.1.1进程标识 230
11.1.2实例:获得进程ID 231
11.1.3 Linux进程的结构 232
11.1.4 Linux进程状态 232
11.1.5 Linux进程控制块结构描述 233
11.2进程控制 234
11.2.1创建进程 234
11.2.2实例:创建进程 234
11.2.3创建守护进程 235
11.2.4实例:创建守护进程 236
11.2.5进程退出 238
11.2.6改变进程的优先级 238
11.2.7执行新程序 240
11.2.8等待进程结束 240
11.2.9实例:进程等待 241
11.3进程的内存映像 243
11.4 Linux进程调度 243
11.5进程间通信 244
11.5.1管道 245
11.5.2有名管道 246
11.5.3消息队列 246
11.5.4信号量 249
11.5.5共享内存 250
11.5.6实例:进程通信 252
本章小结 255
思考与练习 255
第12章 线程 256
12.1线程概述 256
12.2创建线程 256
12.2.1创建线程概述 256
12.2.2实例:创建线程 257
12.3获取/设置线程属性 258
12.3.1获取/设置线程属性的函数 259
12.3.2实例:读取和设置线程属性 262
12.4取消线程 263
12.5线程的私有数据 264
12.5.1操作线程私有数据的函数 264
12.5.2实例:线程私有数据 265
12.6等待线程 266
12.7信号量 267
12.8互斥锁 269
12.8.1互斥锁操作函数 269
12.8.2实例:互斥锁 271
12.9条件变量 272
12.9.1条件变量操作 272
12.9.2实例:条件变量使用 274
本章小结 275
思考与练习 276
第13章Linux网络编程 277
13.1网络编程的基本概念 277
13.1.1 IP地址 277
13.1.2端口 278
13.1.3域名 278
13.1.4 TCP/IP协议 279
13.1.5 PPP协议 280
13.2 Socket通信 281
13.2.1 Socket概述 281
13.2.2 Socket基础 282
13.2.3 Socket网络编程 283
13.2.4实例:Socket聊天编程 287
13.2.5实例:利用Socket进行通信 292
本章小结 296
思考与练习 296
第14章 嵌入式视频采集系统 297
14.1系统方案论证 297
14.2嵌入式开发平台搭建 298
14.2.1 Linux操作系统 298
14.2.2建立交叉编译环境 298
14.3 S3C2440A介绍 300
14.4嵌入式软件平台 303
14.4.1 U-Boot移植 304
14.4.2 Linux内核移植 309
14.4.3根文件系统移植 311
14.4.4配置对USB设备的支持 314
14.4.5 USB摄像头驱动移植 315
14.5视频采集系统平台的软件实现 316
14.5.1嵌入式Web服务器 316
14.5.2嵌入式视频服务器 318
本章小结 322
第15章 指纹识别门禁系统设计 323
15.1自动指纹识别系统概述 323
15.2指纹识别原理 323
15.2.1指纹特征 324
15.2.2指纹图像增强的方法 325
15.2.3指纹特征的提取 326
15.2.4指纹图像匹配 326
15.2.5指纹识别系统的性能参数 327
15.3系统硬件结构介绍 327
15.4指纹传感器U.are.U 4000b sensor 328
15.5系统的软件结构 329
15.6 Linux内核以及Bootloader移植 330
15.7界面功能介绍 335
本章小结 336
第16章 基于Web Service的嵌入式智能家居系统 337
16.1系统概述 337
16.2 Web Service介绍 338
16.3系统设计 339
16.4家庭设备操作 341
16.5服务器对外接口的Web Service实现 342
16.6视频采集 343
本章小结 351