第1章 嵌入式系统基础 1
1.1 嵌入式系统概述 1
1.1.1 嵌入式系统的基本概念 1
1.1.2 嵌入式系统的体系结构 2
1.1.3 几种常用的嵌入式操作系统 2
1.1.4 嵌入式系统发展趋势 4
1.2 ARM处理器硬件开发平台 5
1.2.1 嵌入式处理器简介 5
1.2.2 ARM处理器简介 6
1.2.3 Exynos4412处理器简介 8
1.3 嵌入式软件开发流程 11
1.3.1 嵌入式系统开发概述 11
1.3.2 嵌入式软件开发概述 12
1.4 实验内容:使用SD-CARD烧写EMMC 16
思考与练习 19
第2章 嵌入式Linux C语言程序开发工具 20
2.1 嵌入式Linux下C语言概述 20
2.2 编辑器vim 21
2.2.1 vim的基本模式 21
2.2.2 vim的基本操作 22
2.3 编译器gcc 24
2.3.1 gcc的简介 24
2.3.2 gcc的编译流程 25
2.3.3 gcc的常用编译选项 27
2.4 调试器gdb 31
2.4.1 gdb的使用流程 32
2.4.2 gdb的基本命令 34
2.4.3 gdbserver的远程调试 37
2.5 make工程管理器 40
2.5.1 makefile的基本结构 40
2.5.2 makefile的变量 41
2.5.3 makefile的规则 43
2.5.4 make管理器的使用 44
2.6 实验内容 45
2.6.1 vim使用练习 45
2.6.2 用gdb调试程序的bug 45
2.6.3 编写包含多文件的makefile 46
思考与练习 47
第3章 嵌入式Linux C语言基础 48
3.1 预处理 48
3.1.1 预定义 48
3.1.2 文件包含 53
3.1.3 条件编译 54
3.2 C语言中的内存分配 56
3.2.1 C语言程序所占内存分类 56
3.2.2 堆和栈的区别 56
3.3 程序的可移植性考虑 57
3.3.1 字长和数据类型 57
3.3.2 数据对齐 58
3.3.3 字节顺序 58
3.4 C语言和汇编的接口 59
3.4.1 内嵌汇编的语法 59
3.4.2 编译器优化 62
3.4.3 C语言关键字volatile 62
3.5 ARM Linux内核常见数据结构 63
3.5.1 链表 63
3.5.2 树、二叉树、平衡树 69
3.5.3 哈希表 75
思考与练习 80
第4章 嵌入式Linux开发环境的搭建 81
4.1 构建嵌入式Linux开发环境 81
4.1.1 嵌入式交叉编译环境搭建 82
4.1.2 主机交叉开发环境配置 83
4.2 Bootloader 85
4.2.1 Bootloader的种类 85
4.2.2 U-Boot编译与使用 86
4.2.3 U-Boot移植 91
4.3 Linux内核与移植 92
4.3.1 Linux内核结构 92
4.3.2 Linux内核配置与编译 93
4.3.3 设备树文件 95
4.3.4 Linux内核移植 96
4.4 嵌入式文件系统构建 99
思考与练习 101
第5章 嵌入式Linux文件I/O编程 102
5.1 Linux系统调用及用户编程接口 102
5.1.1 系统调用 102
5.1.2 用户编程接口 103
5.1.3 系统命令 103
5.2 Linux文件I/O系统概述 103
5.2.1 虚拟文件系统 103
5.2.2 通用文件模型 104
5.2.3 Linux中文件及文件描述符 105
5.3 底层文件I/O操作 106
5.3.1 基本文件操作 106
5.3.2 文件锁 108
5.3.3 多路复用 111
5.4 标准I/O编程 116
5.4.1 基本操作 117
5.4.2 其他操作 119
5.4.3 目录操作 122
5.5 实验内容 123
思考与练习 128
第6章 嵌入式Linux多任务编程 129
6.1 Linux下多任务概述 129
6.1.1 任务 129
6.1.2 进程 129
6.1.3 线程 134
6.2 进程控制编程 135
6.2.1 进程编程基础 135
6.2.2 Linux守护进程 139
6.3 进程间通信 143
6.3.1 Linux下进程间通信概述 143
6.3.2 管道通信 144
6.3.3 信号通信 148
6.3.4 信号量 154
6.3.5 共享内存 157
6.3.6 消息队列 159
6.4 多线程编程 163
6.4.1 线程基本编程 163
6.4.2 线程之间的同步与互斥 166
6.4.3 线程属性 169
6.4.4 线程私有数据 170
6.5 实验内容 171
6.5.1 编写多进程程序 171
6.5.2 编写守护进程 175
6.5.3 有名管道通信实验 177
6.5.4 共享内存实验 180
6.5.5 线程池实验 184
思考与练习 187
第7章 嵌入式Linux网络编程 188
7.1 TCP/IP概述 188
7.1.1 TCP/IP的分层模型 188
7.1.2 TCP/IP分层模型特点 189
7.1.3 TCP/IP核心协议 190
7.2 网络编程基本知识 192
7.2.1 套接字概述 192
7.2.2 地址及顺序处理 193
7.2.3 套接字编程 198
7.2.4 编程实例 202
7.3 网络高级编程 205
7.3.1 非阻塞和异步I/O 205
7.3.2 使用多路复用 209
7.4 实验内容:NTP的客户端实现 211
思考与练习 216
第8章 嵌入式Linux设备驱动编程 217
8.1 设备驱动编程基础 217
8.1.1 Linux设备驱动概述 217
8.1.2 Linux内核模块编程 219
8.2 字符设备驱动编程 226
8.2.1 字符设备驱动编写流程 226
8.2.2 重要数据结构 227
8.2.3 设备驱动程序主要组成 229
8.2.4 字符设备驱动程序框架 235
8.3 基于设备树的字符驱动程序实例 238
8.4 GPIO驱动程序实例 242
8.4.1 GPIO工作原理 242
8.4.2 GPIO驱动程序 244
8.5 按键驱动程序实例 247
8.5.1 中断编程 247
8.5.2 按键工作原理 248
8.5.3 按键驱动程序 249
8.5.4 中断信息的编写 250
思考与练习 251
第9章 Qt图形编程 252
9.1 嵌入式GUI简介 252
9.1.1 Qt/Embedded 252
9.1.2 其他嵌入式图形用户界面开发环境 253
9.2 Qt/Embedded开发入门 254
9.2.1 Qt/Embedded介绍 254
9.2.2 Qt/Embedded信号和插槽机制 255
9.2.3 搭建Qt/Embedded-5.8.0开发环境 258
9.2.4 Qt/Embedded窗口部件 262
9.2.5 Qt/Embedded图形界面编程 265
9.2.6 Qt/Embedded对话框设计 267
9.3 实验内容:使用Qt编写“Hello,World”程序 270
思考与练习 275
第10章 综合实例——仓库信息处理系统 276
10.1 仓库信息处理系统概述 276
10.1.1 系统组成 276
10.1.2 前端数据中心(Cortex-A9) 277
10.1.3 显示中心 277
10.2 基本数据结构 278
10.3 功能实现 280
10.3.1 数据接收模块 280
10.3.2 数据处理模块 281
10.3.3 共享内存刷新模块 283
10.3.4 显示中心 283
10.3.5 线程相关 285
思考与练习 285
参考文献 286