目录 1
第1章 嵌入式系统 1
1.1 关于嵌入式系统 1
1.1.1 嵌入式系统概念 1
1.1.2 嵌入式处理器 2
1.2 关于嵌入式操作系统 4
1.2.1 从嵌入式系统到嵌入式操作系统 4
1.2.2 典型的嵌入式操作系统 5
1.3 嵌入式操作系统的应用 7
1.4 典型嵌入式系统 9
1.4.1 VxWorks和pSOS 9
1.4.2 OSKit 16
1.4.3 Palm OS 21
1.4.4 μC/OS和μC/OS-Ⅱ 24
1.4.5 QNX实时操作系统 28
第2章 Linux 33
2.1 Linux简介 33
2.1.1 Linux的历史 33
2.1.2 Linux的发行版本 34
2.1.3 Linux的特点 36
2.2 Linux内核 37
2.2.1 内核概况 37
2.2.2 进程管理 39
2.2.3 存储管理 47
2.2.4 文件系统管理 58
2.2.5 设备管理 68
2.2.6 系统启动 73
2.3 Linux应用 75
2.3.1 Linux在大型服务器上的应用 75
2.3.2 Linux在桌面端的应用 76
2.3.3 Linux在嵌入式环境中的应用 77
2.4 主流嵌入式Linux系统 78
2.4.1 uClinux 78
2.4.2 RTLinux和RTAI 80
2.4.3 MontaVista Linux 84
2.4.4 LynxOS 87
第3章 嵌入式系统开发过程 90
3.1 需求分析和概要设计 90
3.1.1 嵌入式系统的概念和组成 90
3.1.2 系统需求分析 90
3.1.3 系统结构模型建立方式 91
3.1.4 系统结构模型实现流程 92
3.2 硬件 93
3.2.1 嵌入式处理器 93
3.2.2 存储设备 94
3.2.3 外围设备 95
3.2.4 典型的嵌入式系统开发平台 97
3.2.5 Lineo的μCSimm 98
3.2.6 ARM的ARM Evaluator-7T 102
3.3 软件 106
3.3.1 嵌入式系统的软件组成 106
3.3.2 嵌入式软件的基本开发流程 109
3.3.3 嵌入式操作系统 110
3.4 嵌入式系统软件开发过程 111
3.4.1 开发 111
3.4.2 编译和连接 112
3.4.3 重定位和下载 113
3.4.4 调试 113
第4章 嵌入式Linux系统的开发技术 116
4.1 快速启动 116
4.2 开机画面 121
4.2.1 隐藏字符信息 121
4.2.2 显示用户定义的画面 122
4.3 ramdisk技术 123
4.4 系统小型化 125
4.4.1 内核配置 125
4.4.2 嵌入式C库 127
4.4.3 小型shell 130
4.5 系统移植 132
4.5.1 建立交叉编译环境 132
4.5.2 内核移植 136
4.5.3 bootloader 139
第5章 嵌入式Linux系统的进程 141
5.1 Linux在实时方面的缺陷 141
5.2 Linux实时化的关键问题 143
5.3 Linux实时化改造的典型方法 144
5.3.1 外部实时性扩展 144
5.3.2 内部实时性改造 160
5.4 实时应用程序的编写 164
5.5 实时程序的测试 167
第6章 嵌入式Linux系统的存储管理 169
6.1 缺少MMU支持的内存管理 169
6.1.1 3种内存管理模型 170
6.1.2 标准Linux的内存管理 170
6.1.3 μClinux的内存管理 171
6.1.4 μClinux内存管理的局限性 172
6.2 μClinux内存管理的实现 173
6.2.1 内存管理数据结构 173
6.2.2 物理空间管理 174
6.2.3 内核内存的申请和释放 175
6.2.4 内存映射 176
6.3 内存管理模块的启动初始化 178
6.3.1 setup_arch() 178
6.3.2 paing_init() 179
6.3.3 free_area_init() 180
6.3.4 mem_init() 180
6.4 可执行程序的加载 180
6.4.1 用户程序的内存分布 180
6.4.2 reloc段机制 181
6.4.3 flat可执行文件格式 182
6.4.4 执行文件加载流程 183
第7章 嵌入式Linux系统的文件系统 187
7.1 嵌入式系统的存储 187
7.2 文件系统类型 188
7.2.1 cramfs 188
7.2.2 romfs 190
7.3 日志文件系统 193
7.3.1 文件系统完整性 193
7.3.2 日志文件系统 194
7.3.3 jffs与jffs2文件系统 195
7.3.4 ReiserFS文件系统 197
7.3.5 ext3文件系统 198
7.3.6 xfs文件系统 199
7.4 文件系统的目录结构 200
7.4.1 /etc目录 201
7.4.2 /bin目录 204
7.4.3 /sbin目录 205
7.4.4 /dev目录 206
7.5 小结 207
第8章 嵌入式Linux的GUI 208
8.1 嵌入式GUI 208
8.1.1 嵌入式GUI的概念 208
8.1.2 一些成熟的嵌入式GUI 209
8.2 典型的嵌入式GUI—Microwindows 210
8.2.1 Microwindows的设备驱动 211
8.2.2 与设备无关的图形引擎 214
8.2.3 Nano-X的窗口管理和API 218
8.2.4 Microwindows在Linux Frame Buffer上运行 229
8.3 其他知名嵌入式GUI 230
8.3.1 面向实时的MiniGUI 230
8.3.2 应用广泛的Qt/Embedded 232
8.4 嵌入式GUI的应用 233
8.4.1 嵌入式GUI上的其他软件 233
8.4.2 嵌入式GUI的应用 236
8.5 小结 237
第9章 嵌入式Linux系统的网络互联及其优化技术 238
9.1 嵌入式Internet及其应用 238
9.1.1 嵌入式Internet技术的兴起 238
9.1.2 嵌入式Internet技术 240
9.2 网络协议栈的定制 243
9.2.1 Linux的网络代码分布及特点 243
9.2.2 网络部分内核编译配置 245
9.2.3 TCP/IP协议的定制 247
9.3 Linux中TCP/IP协议应用优化技术 253
9.3.1 实现快速上下文切换的设想 253
9.3.2 网络服务器 255
9.4 Linux IP报文转发及防火墙实现分析 260
9.4.1 IP数据报文流 260
9.4.2 netfilter框架 263
9.4.3 netfilter的网络地址转换(NAT)的实现 267
9.4.4 IPTables:netfilter体系的规则载体 271
9.5 基于Linux的家庭网关及其优化技术 273
9.5.1 改变网络设备的工作模式 274
9.5.2 转发报文不再往上经由IP层 277
9.5.3 NAT的重写 280
第10章 嵌入式系统集成开发环境 286
10.1.1 集成开发环境 287
10.1 综述 287
10.1.2 嵌入式软件开发 288
10.1.3 Python开发环境 291
10.2 代码编辑模块 292
10.2.1 代码编辑功能 292
10.2.2 PygtkScintilla 293
10.2.3 EideP代码编辑模块的实现 294
10.3 软件调试模块 296
10.3.1 软件调试功能简介 296
10.3.2 gdb前端(front-end)软件分析 297
10.3.3 gdb图形前端的实现 298
10.3.4 输出信息提取的实现 300
10.3.5 功能实现 301
10.4 JTAG在线调试的实现 302
10.4.1 标准的JTAG协议 303
10.4.2 PXA255中JTAG调试接口协议 305
10.4.3 PXA255中debug相关的寄存器及其访问方式 307
10.4.4 PXA255中debug相关的JTAG命令 312
10.4.5 JTAG在线调试实现思想 314
10.4.6 底层JTAG操作模块 315
10.4.7 host debugger 318
10.4.8 Pygdbserver 326
10.4.9 debug handler 329
10.4.10 用JTAG调试的例子 333
10.5 小结 335
第11章 嵌入式系统案例——机顶盒 336
11.1 机顶盒需求分析 336
11.1.1 机顶盒基本概念 336
11.1.2 所需功能 337
11.2 机顶盒概要设计 338
11.2.1 建立需求库 338
11.2.2 进行需求映射 339
11.3 机顶盒硬件设计 340
11.4 机顶盒软件设计 341
11.4.1 GUI设计 343
11.4.2 系统裁减和压缩 348
11.4.3 网络设计 355
11.4.4 系统启动优化 358
11.5 小结 359
第12章 嵌入式系统案例——宽带路由器 360
12.1 宽带路由器及Nanos操作系统 360
12.1.1 典型宽带路由器的功能 360
12.1.2 Nanos操作系统 361
12.2 操作系统的设计 361
12.2.1 Nanos操作系统的设计思想 361
12.2.2 关键部分的设计思想 362
12.3.1 任务状态 363
12.3 任务管理的实现 363
12.3.2 任务控制块和就绪表 364
12.3.3 任务的创建与删除 366
12.3.4 任务等待和挂起 367
12.3.5 任务调度 368
12.3.6 信号量 369
12.4 内存管理的实现 371
12.4.1 内存寻址 371
12.4.2 伙伴系统算法 373
12.4.3 Cache与Slab分配器 375
12.5 中断与异常 378
12.6 Nanos的PCI总线驱动和8139网卡驱动 380
12.6.1 PCI总线驱动 380
12.6.2 设计通用PCI设备驱动接口 383
12.6.3 rtl8139网卡驱动程序的实现 384
12.7.1 系统的引导 386
12.7 操作系统的初始化 386
12.7.2 内存管理的初始化 387
12.7.3 其他部分的初始化 388
12.8 网卡的半轮询工作模式 389
12.9 网络地址转换——NAT 391
12.9.1 模块的定义 391
12.9.2 NAT模块 392
12.9.3 模块的实现 393
12.10 小结 406
第13章 嵌入式系统案例——基于Linux的家用网关 407
13.1 系统概述 407
13.1.1 硬件设计 407
13.1.2 软件设计 408
13.1.3 准备工作 408
13.2 搭建基本系统 409
13.2.1 编译工具链 410
13.2.2 内核的编译 411
13.2.3 BusyBox的编译和安装 412
13.2.4 系统的配置 413
13.2.5 内核的安装 414
13.3 创建网络连接 415
13.3.1 静态IP的设置 416
13.3.2 动态IP客户端 417
13.3.3 宽带拨号客户端PPP和PPPoE 417
13.4 安装和配置网络服务 418
13.4.1 telnetd服务 418
13.4.2 网页服务器 419
13.4.3 iptables的安装 420
13.4.4 NAT、端口映射和防火墙的实现 420
13.4.5 其他的网络服务 422
13.5 文件系统的压缩 422