第1章 嵌入式系统概述 1
1.1 嵌入式系统简介 1
1.1.1 嵌入式系统发展简史 1
1.1.2 嵌入式系统的定义 3
1.1.3 嵌入式系统的特点 3
1.1.4 嵌入式系统的分类 4
1.1.5 嵌入式系统的应用范围 4
1.2 嵌入式系统的组成结构 7
1.2.1 嵌入式系统的硬件组成结构 8
1.2.2 嵌入式系统的软件层次结构 11
1.2.3 启动程序BootLoader 13
1.2.4 嵌入式操作系统简介 14
1.3 嵌入式系统开发概述 17
1.3.1 嵌入式开发考虑的要素 17
1.3.2 软硬件协同设计 17
1.3.3 嵌入式系统开发的基本流程 18
1.4 嵌入式系统的发展趋势 21
思考与练习 22
第2章 ARM处理器概述 23
2.1 ARM的概念 23
2.2 ARM体系结构的分类版本及扩展技术 24
2.2.1 ARM处理器的体系结构分类版本 24
2.2.2 ARM体系结构的扩展 25
2.3 ARM微处理器系列 27
2.3.1 ARM7微处理器系列 27
2.3.2 ARM9微处理器系列 28
2.3.3 ARM9E微处理器系列 28
2.3.4 ARM10E微处理器系列 29
2.3.5 ARM11微处理器系列 30
2.3.6 Cortex微处理器系列 31
2.3.7 SecurCore系列 33
2.3.8 Intel的Xscale和StrongARM 34
2.4 ARM处理器的工作状态 34
2.5 ARM处理器的存储格式 35
2.6 ARM处理器的工作模式 35
2.7 ARM处理器的应用领域和选型 36
2.7.1 应用领域 36
2.7.2 应用选型 37
2.8 S3C2410A处理器简介 38
2.8.1 S3C2410A处理器概述 38
2.8.2 Magic ARM2410开发板 43
思考与练习 46
第3章 Linux系统概述 47
3.1 Linux的历史与现状 47
3.1.1 Linux的发展概述 47
3.1.2 Linux作为嵌入式操作系统的优势 51
3.1.3 Linux发行版本 52
3.1.4 内核版本号与发行版本号 54
3.2 Linux安装 54
3.2.1 Linux安装基础知识 54
3.2.2 安装前的准备工作 56
3.2.3 RHEL 5.5安装过程 57
3.3 Linux文件及文件系统 67
3.3.1 文件类型及文件属性 67
3.3.2 文件系统类型介绍 69
3.3.3 Linux目录简介 70
3.4 Linux启动过程 71
3.4.1 概述 71
3.4.2 内核引导阶段 72
3.4.3 init阶段 72
思考与练习 73
第4章 Linux命令 74
4.1 初识shell 74
4.2 Linux常用命令 75
4.2.1 用户系统相关命令 75
4.2.2 文件目录相关命令 80
4.2.3 常用的网络命令 88
4.2.4 比较与合并文件相关命令 94
4.2.5 压缩打包相关命令 97
思考与练习 100
第5章 Linux编程基础 101
5.1 vi编辑器 101
5.1.1 vi简介 101
5.1.2 vi基本编辑命令 103
5.2 GCC编译器 105
5.2.1 GCC编译过程 105
5.2.2 GCC编译选项介绍 108
5.3 GDB调试器 112
5.3.1 GDB使用流程 112
5.3.2 GDB基本命令 115
5.4 make工程管理器 118
5.4.1 Makefile文件格式 119
5.4.2 Makefile文件组成 120
5.4.3 make管理器选项 125
5.4.4 使用autoTools 125
5.5 Linux shell编程 129
5.5.1 shell变量 129
5.5.2 shell测试命令 131
5.5.3 shell流控制结构 133
5.5.4 shell函数 137
思考与练习 138
第6章 构建嵌入式Linux开发平台 140
6.1 嵌入式交叉编译环境搭建 140
6.2 U-Boot移植 142
6.2.1 引导系统简介 142
6.2.2 U-Boot概述 143
6.2.3 U-Boot移植过程 145
6.3 Linux内核移植 155
6.3.1 概述 155
6.3.2 Linux内核移植过程 156
6.4 根文件系统移植 161
6.4.1 根文件系统概述 162
6.4.2 BusyBox根文件系统移植过程 163
思考与练习 168
第7章 嵌入式Linux设备驱动开发 169
7.1 设备驱动概述 169
7.1.1 驱动模块 169
7.1.2 设备文件分类 170
7.1.3 设备号 171
7.1.4 设备驱动层次结构 171
7.1.5 设备驱动程序与外界接口 171
7.1.6 设备驱动特点 172
7.2 Linux字符设备驱动 172
7.2.1 cdev结构体 173
7.2.2 分配和释放设备号 174
7.2.3 file_operations结构体 174
7.2.4 字符设备驱动程序组成 178
7.3 触摸屏设备驱动实例介绍 181
7.3.1 S3C2410X触摸屏工作原理 181
7.3.2 触摸屏设备驱动中的数据结构 183
7.3.3 触摸屏设备驱动中的硬件控制 184
7.3.4 触摸屏驱动模块加载和卸载函数 184
7.3.5 触摸屏驱动中断、定时器处理程序 185
7.3.6 触摸屏驱动的打开、释放函数 187
7.3.7 触摸屏驱动的读函数 188
7.3.8 触摸屏驱动的轮询与异步通知函数 188
7.4 块设备驱动 189
7.4.1 字符设备与块设备I/O操作的区别 189
7.4.2 block_device_operations结构体 189
7.4.3 gendisk结构体 190
7.4.4 request和bio结构体 191
7.4.5 块设备驱动的注册与注销 197
7.4.6 块设备驱动模块的加载与卸载 197
7.4.7 块设备驱动的打开与释放 199
7.4.8 块设备驱动的I/O控制 199
7.4.9 块设备驱动的I/O请求处理 200
7.5 网络设备驱动 203
7.5.1 Linux网络设备驱动的结构 203
7.5.2 网络设备驱动的注册与注销 211
7.5.3 网络设备的初始化 212
7.5.4 网络设备的打开与释放 213
7.5.5 数据发送流程 214
7.5.6 数据接收流程 215
7.5.7 网络连接状态 217
7.5.8 参数设置和数据统计 219
思考与练习 221
第8章 文件I/O编程 222
8.1 Linux系统调用及用户编程接口 222
8.2 Linux文件及文件描述符 223
8.3 不带缓存的文件I/O操作 224
8.3.1 open()和close()函数 224
8.3.2 read()、write()和lseek()函数 226
8.3.3 fcntl()函数 228
8.4 嵌入式Linux设备文件I/O操作实例 231
8.4.1 串口设备概述 231
8.4.2 串口设备设置 232
8.4.3 串口设备的使用 235
思考与练习 237
第9章 多进程编程 238
9.1 Linux进程概述 238
9.1.1 Linux进程相关概念 238
9.1.2 Linux进程结构与模式 240
9.1.3 Linux进程控制 241
9.2 Linux进程的基本操作 241
9.2.1 创建进程fork()函数 241
9.2.2 系统调用exec()函数族 243
9.2.3 系统调用exit()和_exit()函数 245
9.2.4 系统调用wait()和waitpid()函数 246
9.2.5 系统调用sleep()函数 248
9.3 Linux进程间通信 248
9.3.1 管道通信 249
9.3.2 消息队列 255
9.3.3 信号量 260
9.3.4 共享内存 264
思考与练习 268
第10章 多线程编程 269
10.1 Linux线程概述 269
10.2 Linux线程编程实现 270
10.2.1 Linux基本线程相关函数 270
10.2.2 Linux线程互斥锁 273
10.2.3 Linux线程信号量 276
思考与练习 279
第11章 网络编程 280
11.1 TCP/IP协议概述 280
11.1.1 TCP/IP协议簇 281
11.1.2 UDP与TCP简介 282
11.2 socket 287
11.3 Linux网络通信辅助函数介绍 288
11.4 socket基础编程 290
11.4.1 socket()函数 290
11.4.2 bind()函数 291
11.4.3 listen()函数 291
11.4.4 accept()函数 291
11.4.5 connect()函数 292
11.4.6 send()和recv()函数 292
11.4.7 sendto()和recvfrom()函数 293
11.4.8 网络通信编程实例 294
思考与练习 297
第12章 嵌入式图形用户界面设计 298
12.1 嵌入式GUI简介 298
12.1.1 嵌入式GUI的特点 298
12.1.2 嵌入式GUI的种类 298
12.2 Qt介绍 299
12.2.1 Qt/Embedded简介 300
12.2.2 建立Qt开发环境 301
12.2.3 Qt designer主界面 303
12.3 Qt4编程 304
12.3.1 信号和槽 304
12.3.2 hello窗口实例 306
12.3.3 控件的几何排列实例 308
12.3.4 对话框使用实例 310
12.3.5 主窗口使用实例 313
12.3.6 Qt designer图形设计器使用实例 319
12.4 Qt4/Embedded的嵌入式应用 322
12.4.1 建立Qt4/Embedded开发环境 322
12.4.2 Qt4/Embedded程序实例 324
思考与练习 325
第13章 电子菜单设计 326
13.1 功能描述 326
13.2 系统设计 327
13.2.1 开发环境 328
13.2.2 系统功能模块设计 328
13.2.3 项目小结 335
参考文献 336