第一篇 基础篇 3
第1章 嵌入式系统概述 3
1.1 嵌入式系统 3
1.1.1 嵌入式系统的定义 3
1.1.2 嵌入式系统组成 3
1.1.3 嵌入式系统的特点 5
1.1.4 嵌入式系统的应用 6
1.2 嵌入式操作系统 7
1.2.1 嵌入式操作系统分类 8
1.2.2 当前主流的嵌入式操作系统 9
1.3 嵌入式Linux操作系统 9
1.3.1 Linux简介 9
1.3.2 嵌入式Linux操作系统 11
1.3.3 嵌入式Linux操作系统的优势 11
1.4 嵌入式Linux开发环境 12
1.5 嵌入式Linux系统开发要点 13
本章小结 14
第2章 初识Linux 15
2.1 安装发行版Linux操作系统 15
2.1.1 安装虚拟机VMware 15
2.1.2 在虚拟机VMware中安装RedHat Linux 9.0操作系统 16
2.1.3 安装VMware Tools 20
2.2 Linux的目录结构 22
2.3 Linux的文件属性 23
2.4 Linux的文件类型 23
2.5 Shell 25
2.5.1 Shell简介 25
2.5.2 常用Shell命令 26
2.6 Shell编程基础 32
2.6.1 建立和运行Shell程序 32
2.6.2 Shell中的变量 32
2.6.3 Shell中引号的使用方法 36
2.6.4 Shell中的test命令 37
2.6.5 条件语句 39
2.6.6 循环语句 40
2.6.7 Shell中的函数 44
本章小结 45
第3章 Linux编程环境 46
3.1 编辑器vi 46
3.1.1 vi简介 46
3.1.2 vi用法 47
3.1.3 vi使用实例分析 48
3.2 编译器gcc 50
3.2.1 gcc简介 50
3.2.2 gcc的执行过程 50
3.2.3 gcc的基本用法和选项 53
3.2.4 gcc编译实例 54
3.3 调试器GDB 55
3.3.1 GDB简介 55
3.3.2 GDB常用命令 55
3.3.3 GDB使用实例 58
3.4 make工具和Makefile规则 62
3.4.1 make和Makefile概述 62
3.4.2 Makefile文件内容 62
3.4.3 Makefile规则 63
3.4.4 make工作原理 64
3.4.5 Makefile中的变量 64
3.4.6 clean命令的应用 65
3.4.7 Makefile文件示例 65
3.5 glibc 67
3.5.1 Linux编程库简介 67
3.5.2 Linux线程库 68
本章小结 70
第4章 交叉开发环境 71
4.1 交叉编译 71
4.2 交叉开发环境 71
4.3 交叉开发工具组成 72
4.4 宿主机与目标机之间的通信方式 74
4.4.1 互联通信方式 74
4.4.2 可拔插通信方式 75
4.5 交叉开发环境建立 75
4.5.1 创建交叉开发工具链 75
4.5.2 宿主机开发环境配置 75
4.6 基于UP-NETARM2410-S开发平台交叉开发环境建立 83
4.6.1 安装PC机RedHatLinux虚拟机 83
4.6.2 开发工具软件的安装 83
4.6.3 宿主机网络配置 84
4.6.4 宿主机串口配置 85
4.6.5 基于UP-NETARM2410-S开发平台交叉开发环境建立的总结 85
4.7 交叉编译和交叉调试实例 86
本章小结 88
第5章 ARM处理器 89
5.1 ARM处理器概述 89
5.1.1 ARM 89
5.1.2 ARM微处理器的应用领域及特点 90
5.1.3 ARM微处理器版本及系列 90
5.2 ARM微处理器结构 94
5.2.1 RISC体系结构 94
5.2.2 ARM微处理器的寄存器结构 95
5.2.3 ARM微处理器的指令结构 95
5.3 ARM编程模型 95
5.3.1 处理器的工作状态 95
5.3.2 流水线技术 96
5.3.3 存储器模式 98
5.3.4 数据和指令类型 98
5.3.5 处理器工作模式 98
5.3.6 寄存器组织 98
5.3.7 异常 104
5.4 ARM指令集 108
5.4.1 ARM处理器寻址方式 108
5.4.2 常见ARM指令集 110
5.5 ARM汇编程序设计 124
5.5.1 ARM汇编程序一些规范 124
5.5.2 ARM汇编程序设计举例 125
本章小结 126
第二篇 提高篇 129
第6章 创建嵌入式Linux交叉开发工具链 129
6.1 下载源文件 129
6.2 建立工作目录 130
6.3 输出环境变量 131
6.4 建立内核头文件 132
6.5 建立二进制工具 134
6.6 建立初始编译器 136
6.7 建立c库 138
6.8 建立全套编译器 140
6.9 完成工具链的设置 141
6.10 测试和验证交叉编译工具 141
本章小结 142
第7章 嵌入式Linux引导程序 143
7.1 引导程序(Bootloader)概述 143
7.2 ARM Bootloader的作用 143
7.3 Bootloader通用的概念 144
7.4 Bootloader的主要任务与框架结构 146
7.5 vivi 148
7.5.1 vivi简介 148
7.5.2 vivi的软件结构分析 150
7.5.3 vivi启动原理 160
7.6 vivi移植实例(移植vivi到博创2410) 178
7.6.1 对vivi进行移植修改 179
7.6.2 对vivi进行配置与编译 181
7.6.3 烧写vivi 183
7.6.4 测试vivi 185
本章小结 190
第8章 嵌入式Linux内核 191
8.1 Linux内核简介 191
8.2 Linux内核软件结构分析 191
8.2.1 Linux内核配置系统原理 191
8.2.2 配置Linux内核 203
8.2.3 Linux内核启动原理 205
8.3 Linux内核移植实例(移植Linux2.6.14.1到博创2410) 207
8.3.1 下载Linux内核并解压 207
8.3.2 修改Makefile 207
8.3.3 设置Flash分区 207
8.3.4 配置内核 211
8.3.5 测试2.6.14.1内核 215
8.3.6 内核编译过程中产生的部分错误及其解决方法 218
本章小结 219
第9章 嵌入式Linux根文件系统 221
9.1 文件系统 221
9.1.1 文件系统简介 221
9.1.2 文件和目录 221
9.1.3 文件权限 223
9.1.4 文件链接 225
9.1.5 文件系统 226
9.2 Linux文件系统 226
9.2.1 Linux文件系统概述 226
9.2.2 Linux文件系统组成 227
9.2.3 Linux文件系统管理 227
9.2.4 虚拟文件系统(VFS) 227
9.2.5 安装和卸载文件系统 228
9.3 嵌入式闪存文件系统 230
9.3.1 嵌入式系统存储设备及其管理机制分析 230
9.3.2 基于Flash的文件系统 232
9.3.3 基于RAM的文件系统 233
9.3.4 网络文件系统NFS(Network File System) 234
9.4 构建嵌入式Linux根文件系统原理 234
9.4.1 根文件系统关键目录 235
9.4.2 根文件系统关键文件 236
9.4.3 BusyBox 240
9.5 构建嵌入式Linux根文件系统实例——CramFS根文件系统构建(博创2410) 241
9.5.1 创建根文件系统目录 242
9.5.2 创建设备文件 242
9.5.3 编译BusyBox 242
9.5.4 系统配置文件的建立 244
9.5.5 添加应用程序 245
9.5.6 创建lib库文件 245
9.5.7 cramfs文件系统映像的制作 246
9.5.8 下载cramfs根文件系统映像到开发板 246
9.5.9 测试cramfs根文件系统 246
9.5.10 cramfs根文件系统制作中的常见错误及解决办法 247
本章小结 250
第10章 嵌入式Linux设备驱动 251
10.1 Linux设备驱动基本原理 251
10.1.1 概述 251
10.1.2 设备文件 252
10.1.3 使用/proc目录中的文件监视驱动程序的状态 254
10.2 Linux设备驱动程序模块 254
10.3 Linux设备驱动程序接口 256
10.4 Linux设备驱动程序实现过程 258
10.4.1 驱动程序的注册与注销 258
10.4.2 设备的打开与释放 259
10.4.3 设备的控制操作(ioctl) 260
10.4.4 中断处理 262
10.5 怎样编写设备驱动程序 263
10.6 Linux2.6内核驱动原理 270
本章小结 274
第三篇 实践篇 277
第11章 TFT-LCD驱动程序开发 277
11.1 TFT-LCD工作原理 277
11.1.1 LCD概述 277
11.1.2 LCD显示原理 278
11.1.3 LCD驱动原理 279
11.1.4 LCD的分类 281
11.2 LQ080V3DG01液晶屏 282
11.3 SC2410内部LCD控制器 282
11.3.1 管脚 282
11.3.2 寄存器介绍 283
11.3.3 控制流程 284
11.3.4 TFT控制器操作 285
11.4 Linux驱动程序接口——FrameBuffer 285
11.4.1 FrameBuffer 285
11.4.2 数据结构 286
11.5 LCD驱动程序主要代码结构以及关键代码分析 290
11.5.1 FrameBuffer驱动的统一管理 290
11.5.2 实现消息的分派 291
11.5.3 开发板S3C2410 LCD驱动的流程 292
11.6 LCD驱动程序开发实例 294
11.6.1 S3C2410与LCD模块的连接电路 294
11.6.2 修改代码(一)——LCD显示企鹅图像 295
11.6.3 修改代码(二)——LCD显示小车图像 300
本章小结 301
第12章 USB驱动程序开发 302
12.1 USB简介 302
12.1.1 USB 302
12.1.2 USB的结构及传输方式 303
12.1.3 USB设备的使用 303
12.1.4 USB的优势 304
12.2 Linux USB子系统 306
12.2.1 文件系统 306
12.2.2 USB驱动程序(USBD) 307
12.2.3 主机控制器驱动程序(hcd) 307
12.2.4 客户端驱动程序 307
12.3 USB客户端驱动程序架构和开发 307
12.3.1 USB的协议规范初识 307
12.3.2 Linux的USB驱动框架 309
12.4 在Linux内核中加入USB模块 317
12.4.1 配置文件 317
12.4.2 调试 318
12.5 USB驱动程序开发实例 319
12.5.1 S3C2410与USB模块的连接电路 319
12.5.2 制作新的根文件系统 319
12.5.3 修改代码 320
本章小结 326
第13章 Qt图形应用程序设计 327
13.1 图形用户界面系统(GUI) 327
13.2 Qt和Qt/Embedded简介 327
13.3 Qt/Embedded体系结构 328
13.3.1 交叉开发平台 328
13.3.2 Qt/E的窗口系统 329
13.3.3 Qt/E图形引擎的实现 330
13.4 Qt编程入门 331
13.4.1 Qt编程实例 331
13.4.2 代码解释 338
13.5 Qt和Qt/E开发环境的建立和移植 341
13.5.1 Qt2和Qt2/E开发环境的建立 341
13.5.2 Qt2/E程序在博创2410开发板上的移植 347
13.5.3 Qtopia开发环境的建立 354
本章小结 356
参考文献 357