第1章 嵌入式系统基础 1
1.1 嵌入式系统简介 1
1.1.1 嵌入式系统的概述 1
1.1.2 嵌入式系统的组成 2
1.1.3 嵌入式系统的应用领域 3
1.1.4 嵌入式系统的发展趋势 5
1.2 嵌入式处理器 6
1.2.1 嵌入式处理器的分类 6
1.2.2 嵌入式处理器的现状 6
1.2.3 ARM处理器 8
1.3 嵌入式系统开发过程 9
1.3.1 嵌入式系统的总体结构 9
1.3.2 嵌入式系统的开发特点 10
1.3.3 嵌入式系统的开发流程 11
1.3.4 调试嵌入式系统 12
练习题 14
第2章 嵌入式Linux的开发环境及工具软件 15
2.1 嵌入式Linux的开发环境 15
2.1.1 嵌入式Linux开发环境建立 15
2.1.2 嵌入式Linux开发的一般过程 16
2.2 Linux开发工具的使用 17
2.2.1 Linux开发工具GNU gcc的使用 17
2.2.2 gdb调试器简介 27
2.3 GNU make命令和Makefile文件 31
2.3.1 Makefile文件的规则 31
2.3.2 Makefile文件中隐含规则 34
2.3.3 Makefile文件的命令 37
2.3.4 Makefile文件的变量 38
2.3.5 Makefile文件的条件判断 41
2.3.6 Makefile文件中常用函数 43
2.3.7 子目录Makefile 45
2.4 嵌入式Linux编辑器vi的使用 46
2.4.1 vi的基本模式 46
2.4.2 vi的基本操作 47
2.5 Emacs综合编辑器 48
2.5.1 Emacs的启动与退出 48
2.5.2 Emacs的基本编辑 49
2.5.3 Emacs的C模式 51
2.5.4 Emacs的Shell模式 52
练习题 52
第3章 嵌入式C语言程序设计基础 54
3.1 嵌入式C语言预处理伪指令 54
3.2 嵌入式C语言的基本数据类型 58
3.2.1 数据类型与表达式 58
3.2.2 常量 60
3.2.3 变量 63
3.2.4 运算符 67
3.3 嵌入式Linux C语言程序结构和控制语句 70
3.3.1 嵌入式Linux C语言3种程序结构 70
3.3.2 嵌入式Linux C语言基本语句 70
3.4 选择语句 72
3.4.1 if语句 72
3.4.2 switch语句 73
3.5 循环语句 74
3.5.1 while和do-while语句 74
3.5.2 for循环语句 74
3.5.3 break语句和continue语句 75
3.5.4 ARM Linux循环语句应用实例 76
3.6 goto语句 77
3.6.1 goto语句语法 77
3.6.2 ARM Linux中goto语句应用实例 77
3.7 函数 78
3.7.1 C语言函数概述 78
3.7.2 函数定义与声明 79
3.7.3 函数的参数、值和基本调用 81
3.7.4 函数的嵌套、递归调用 87
3.8 数组 89
3.9 指针 93
3.10 结构体与联合 98
练习题 107
第4章 嵌入式Linux C高级编程及调试举例 109
4.1 内嵌汇编指令 109
4.2 汇编语言与C/C++的混合编程 113
4.3 从汇编程序中访问C程序变量 113
4.4 汇编程序与C/C++程序的相互调用规则——ATPCS 114
4.5 汇编程序与C/C++程序的相互调用 116
4.6 嵌入式Linux静态链接库与动态链接库 120
4.6.1 Linux静态链接库及创建 120
4.6.2 Linux动态链接库及创建 121
4.7 嵌入式Linux下程序调试应用举例 128
4.7.1 Linux宿主机下的应用程序调试 128
4.7.2 目标机下的应用程序调试 139
练习题 142
第5章 嵌入式Linux下文件的操作 145
5.1 ARM Linux文件I/O系统概述 145
5.1.1 虚拟文件系统 145
5.1.2 通用文件模型 146
5.2 不带缓存的文件I/O操作 156
5.2.1 文件的创建和读写 157
5.2.2 移动文件的读写位置 161
5.2.3 文件的各个属性 162
5.2.4 目录文件的操作 163
5.3 Linux标准I/O流 164
5.4 嵌入式Linux的文件操作应用举例 177
5.4.1 文件锁的应用 177
5.4.2 嵌入式Linux串行口通信设计 182
练习题 192
第6章 ARM Linux进程与进程调度 193
6.1 ARM Linux进程管理 193
6.1.1 进程描述符及任务结构 193
6.1.2 进程的调度 198
6.2 ARM Linux进程控制相关API 201
6.3 ARM Linux进程间通信API 212
6.3.1 Linux中进程间通信 212
6.3.2 管道 213
6.3.3 命名管道 216
6.3.4 信号通信 221
6.3.5 共享内存 236
6.3.6 消息队列 238
6.4 Linux守护进程 245
6.4.1 守护进程概述 245
6.4.2 编写规则 245
6.4.3 守护进程实例 247
练习题 248
第7章 ARM Linux多线程开发实例 250
7.1 Linux多线程相关API 251
7.1.1 线程的创建 252
7.1.2 线程的终止 253
7.1.3 线程的标识 256
7.1.4 线程的一次性初始化 256
7.1.5 线程的私有数据 258
7.2 信号灯 259
7.2.1 POSIX有名信号灯的API函数 259
7.2.2 POSIX基于内存的信号灯的API函数 264
7.3 互斥量 266
7.4 条件变量 274
练习题 279
第8章 ARM Linux网络编程实例 280
8.1 TCP/IP协议简介 280
8.1.1 TCP/IP的分层模型 280
8.1.2 TCP/IP分层模型特点 281
8.1.3 Internet层中的协议 283
8.1.4 传输层的协议 286
8.2 网络基础编程 289
8.2.1 Socket概述 289
8.2.2 Socket基础 290
8.2.3 Socket网络编程 295
练习题 318
第9章 嵌入式Linux设备驱动程序开发 319
9.1 嵌入式Linux的设备管理 319
9.1.1 设备驱动和文件系统的关系 320
9.1.2 设备类型 322
9.1.3 设备号 323
9.1.4 设备驱动中关键数据结构 323
9.1.5 设备驱动开发中基本函数 327
9.2 设备驱动模块化编程 329
9.2.1 设备驱动程序的开发流程 329
9.2.2 内核空间和用户空间 329
9.2.3 设备注册和初始化 330
9.2.4 中断管理 331
9.2.5 加载和卸载驱动程序 332
9.3 GPIO字符设备驱动程序设计 333
9.3.1 GPIO接口设计 333
9.3.2 LED驱动程序代码分析 336
9.3.3 LED驱动程序加载及测试 338
9.4 A/D转换器驱动程序设计 339
9.4.1 S3C2410X中断控制器 339
9.4.2 S3C2410X中断接口函数及宏定义 342
9.4.3 S3C2410X A/D转换器 345
9.4.4 A/D转换驱动程序设计 347
9.4.5 A/D转换驱动程序的测试 351
练习题 353
参考文献 354