第1章 嵌入式系统设计概述 1
1.1 嵌入式系统的定义 1
1.1.1 嵌入式系统的发展历史 2
1.1.2 嵌入式系统的组成 3
1.1.3 嵌入式系统的特点 4
1.2 嵌入式系统设计概述 5
1.3 嵌入式系统的学习方法 6
本章总结 6
第2章 磨刀不误砍柴工 7
2.1 Linux概述 7
2.2 Linux的安装 8
2.2.1 创建一个新的虚拟机 9
2.2.2 在虚拟机上安装Red Hat Linux 9 11
2.3 Red Hat Linux 9的初步设置 18
2.3.1 VMware tools的安装 20
2.3.2 网络设置 22
2.4 使用shell提高效率 24
2.4.1 shell初始化文件配置 24
2.4.2 常用的脚本 26
2.5 学习开发工具的使用 30
2.5.1 Vim高级技巧 30
2.5.2 编译流程 32
2.5.3 工程管理器make 37
2.6 嵌入式Linux常用的命令 42
2.6.1 Linux基本命令 42
2.6.2 arm-linux-系列 47
2.6.3 diff和patch的使用 52
本章总结 57
第3章 走马观花 58
3.1 本书基于的硬件平台 58
3.1.1 ARM概述 59
3.1.2 ARM命名规则 60
3.1.3 AT91 RM9200简介 61
3.1.4 K9I开发板概述 63
3.2 让系统先跑起来 65
3.2.1 准备工作 65
3.2.2 下载Boot Loader 71
3.2.3 内核和文件系统 72
3.2.4 搭建交叉编译环境 75
3.2.5 应用程序测试 76
3.3 深入理解硬件平台 78
3.3.1 最小系统组成 78
3.3.2 时钟系统 78
3.3.3 NVM 82
3.3.4 JTAG接口 87
本章总结 91
第4章 Boot Loader 92
4.1 准备工作 92
4.1.1 整合资源 92
4.1.2 代码阅读工具 93
4.2 Boot Loader概述 94
4.2.1 Boot Loader概念 94
4.2.2 Boot Loader在嵌入式系统中的必要性 95
4.2.3 Boot Loader的启动流程 96
4.2.4 Boot Loader如何固化 97
4.3 AT91RM9200的启动机制 98
4.3.1 片内启动 98
4.3.2 片外启动 101
4.3.3 3种启动场景 102
4.4 Boot Loader的移植 103
4.4.1 Loader和Boot 104
4.4.2 U-boot的移植 108
4.5 U-boot的3种启动方式无关性设计 114
4.5.1 背景介绍 115
4.5.2 重映射的理论模型 115
4.5.3 U-boot的不合理性分析 116
4.5.4 解决方案 116
4.6 Boot Loader深入分析 119
4.6.1 将ELF文件转换为BIN 119
4.6.2 U-boot源代码分析 123
4.6.3 U-boot的命令机制 129
4.6.4 U-boot的source实现 133
本章总结 139
第5章 Linux内核移植 140
5.1 嵌入式操作系统的选择 140
5.2 Linux 2.6介绍 142
5.3 Makefile体系 144
5.4 内核的移植 150
5.4.1 基本移植 151
5.4.2 出现的问题 155
5.5 内核映像格式 159
5.5.1 生成过程 160
5.5.2 zImage自解压引导过程 163
5.6 Boot Loader与内核的通信机制 168
5.6.1 基本模型 168
5.6.2 tagged list组织方式 169
5.6.3 Boot Loader实现 173
5.6.4 Linux内核实现 179
本章总结 186
第6章 文件系统 187
6.1 概述 187
6.2 库 191
6.2.1 库的概述 191
6.2.2 库的命名 191
6.2.3 库的制作方法 192
6.3 一个最简单的根文件系统 193
6.4 基本功能完备的根文件系统 201
6.4.1 修改现有的文件系统映像 201
6.4.2 从零开始制作根文件系统 204
6.4.3 网络功能 213
6.5 嵌入式混合文件系统——EFS 226
6.5.1 问题提出 226
6.5.2 系统设计方案 226
6.5.3 组件实现 229
6.5.4 系统集成设计 231
6.5.5 辅映像制作 236
本章总结 237
第7章 应用程序 238
7.1 应用开发环境的建立 238
7.1.1 嵌入式Linux的GDB调试环境建立 238
7.1.2 嵌入式Linux的NFS开发环境建立 239
7.1.3 嵌入式Linux的TFTP开发环境建立 241
7.1.4 嵌入式Linux的DHCP开发环境建立 242
7.2 串行/网络数据网关 244
7.2.1 基本原理 244
7.2.2 数据帧的设计 245
7.2.3 网络异常情况的处理 245
本章总结 246
参考文献 247