第1章 绪论 1
1.1 嵌入式系统概述 1
1.1.1 嵌入式系统定义与特点 1
1.1.2 嵌入式系统应用领域 2
1.1.3 嵌入式系统发展历程与发展趋势 4
1.1.4 嵌入式系统组成 7
1.2 嵌入式操作系统 12
1.2.1 嵌入式操作系统简介 12
1.2.2 嵌入式Linux 12
1.2.3 WindowsEmbedded 20
1.2.4 VxWorks操作系统 24
1.2.5 Android系统 25
1.2.6 iOS系统 28
本章小结 29
习题与实践 29
第2章 嵌入式Linux操作系统基础 30
2.1 嵌入式Linux操作系统内核结构 30
2.1.1 Linux操作系统内核结构 30
2.1.2 Linux操作系统文件结构 32
2.2 嵌入式Linux系统管理 34
2.2.1 嵌入式Linux系统配置 34
2.2.2 嵌入式Linux的基本操作命令 38
本章小结 72
习题与实践 72
第3章 嵌入式Linux编程基础 74
3.1 C语言开发嵌入式系统的优势 74
3.2 GCC编译器 75
3.2.1 GCC编译器简介 75
3.2.2 GCC编译过程 76
3.2.3 GCC编译器的基本用法 79
3.3 GDB程序调试 82
3.3.1 GDB简介 82
3.3.2 启动GDB的方法 82
3.3.3 GDB命令 84
3.4 makefile工程管理 89
3.4.1 makefile概述 89
3.4.2 make程序的命令行选项和参数 90
3.4.3 makefile中的依赖关系 91
3.4.4 makefile中的规则 92
3.4.5 makefile中的宏 94
3.4.6 makefile构建多个目标 96
3.4.7 makefile隐含规则 97
3.4.8 makefile后缀规则 97
3.4.9 makefile的模式规则 98
3.4.10 GNU make和GCC的有关选项 100
本章小结 100
习题与实践 101
第4章 嵌入式Linux文件编程 103
4.1 文件系统概述 103
4.1.1 虚拟文件系统 103
4.1.2 Linux文件类型 104
4.1.3 Linux文件系统组成 106
4.1.4 文件描述符 108
4.2 Linux基本文件I/O操作 108
4.2.1 文件的创建 108
4.2.2 文件的打开 110
4.2.3 文件的关闭 111
4.2.4 读文件 112
4.2.5 写文件 112
4.2.6 文件定位 112
4.2.7 权限判断 113
4.3 基于流的标准I/O操作 115
4.3.1 文件的创建和打开 115
4.3.2 读文件 116
4.3.3 写文件 116
4.3.4 从文件读字符 116
4.3.5 向文件写字符 117
4.3.6 格式化读 117
4.3.7 格式化写入 117
4.3.8 文件定位 117
4.3.9 获取文件读写位置 118
4.3.10 获取当前路径 118
4.3.11 创建目录 118
4.4 Linux时间编程 120
4.4.1 时间获取 121
4.4.2 时间转换 121
4.4.3 时间显示 122
4.4.4 取得当前时间 123
4.4.5 延时执行 124
本章小结 124
习题与实践 124
第5章 嵌入式Linux进程控制 126
5.1 进程控制理论基础 126
5.1.1 进程定义 126
5.1.2 进程特点 127
5.1.3 进程状态 127
5.1.4 进程ID 129
5.1.5 进程互斥 129
5.1.6 临界资源与临界区 130
5.1.7 进程同步 130
5.1.8 进程调度 130
5.1.9 调度算法 130
5.1.10 死锁 132
5.2 进程控制编程 132
5.2.1 获取进程信息 132
5.2.2 进程控制 134
本章小结 140
习题与实践 141
第6章 嵌入式Linux进程间通信 142
6.1 进程通信概述 142
6.1.1 进程通信目的 142
6.1.2 进程通信发展历程 142
6.1.3 进程通信分类 143
6.2 管道通信 143
6.2.1 管道通信概述 143
6.2.2 无名管道 143
6.2.3 命名管道 148
6.3 信号通信 150
6.3.1 信号概述 150
6.3.2 信号的种类 151
6.3.3 信号的生命周期 151
6.3.4 信号相关函数 152
6.4 共享内存通信 155
6.4.1 共享内存概述 155
6.4.2 共享内存操作步骤 155
6.4.3 共享内存操作函数 156
6.5 消息队列通信 160
6.5.1 消息队列概述 160
6.5.2 消息队列相关函数 160
6.6 信号量通信 165
6.6.1 信号量概述 165
6.6.2 信号量工作原理 165
6.6.3 信号量相关函数 166
本章小结 170
习题与实践 170
第7章 嵌入式Linux多线程编程 171
7.1 多线程概述 171
7.2 多线程程序设计 171
7.3 线程属性 177
7.4 线程的数据处理 185
7.4.1 线程数据 185
7.4.2 互斥锁 187
7.4.3 条件变量 192
7.4.4 信号量 195
本章小结 198
习题与实践 199
第8章 嵌入式Linux网络编程 201
8.1 Linux系统网络编程概述 201
8.1.1 Linux系统网络编程优势 201
8.1.2 网络模型 201
8.1.3 TCP/IP协议族 205
8.1.4 TCP/IP封装 206
8.2 Linux网络编程基础 211
8.2.1 套接字 211
8.2.2 网络地址 212
8.2.3 字节序 213
8.2.4 Socket编程常用函数 214
8.3 TCP网络程序设计 217
8.4 UDP网络程序设计 221
本章小结 225
习题与实践 225
第9章 嵌入式Linux系统构建 226
9.1 目标板硬件构建 226
9.1.1 目标板硬件资源 226
9.1.2 目标板外围接口电路原理图 229
9.2 开发环境搭建 237
9.2.1 宿主机开发环境搭建 237
9.2.2 基础软件移植 240
本章小结 247
习题与实践 247
第10章 嵌入式Linux数据采集系统开发 248
10.1 嵌入式系统开发流程 248
10.2 数据采集系统服务器端软件系统设计 249
10.2.1 服务器端数据采集系统组成 249
10.2.2 Mjpg-streamer软件移植 250
10.2.3 FFmpeg移植 259
10.2.4 温度采集程序设计 260
10.2.5 网页交互程序设计 263
10.3 数据采集系统客户端软件设计 264
10.3.1 数据采集系统客户端开发环境的搭建 264
10.3.2 客户端网页设计 265
10.3.3 HTTP网页请求分析 268
10.3.4 Mjpg-streamer响应分析 270
10.3.5 基于Ajax与CGI技术的HTML网页设计 271
10.4 B/S架构嵌入式数据采集系统测试 280
10.4.1 服务器端系统测试 280
10.4.2 客户端系统测试 283
本章小结 285
习题与实践 285
参考文献 286