第1章 嵌入式系统基础 1
1.1 嵌入式系统简介 1
1.1.1 嵌入式系统定义 1
1.1.2 嵌入式系统与PC 2
1.1.3 嵌入式系统的特点 4
1.2 嵌入式系统的发展 5
1.2.1 嵌入式系统现状 5
1.2.2 嵌入式系统发展趋势 5
1.3 典型的嵌入式操作系统 6
1.3.1 Linux 7
1.3.4 VxWorks 8
1.3.3 WindowsCE 8
1.3.2 uC/OS 8
1.3.5 Palm OS 9
1.3.6 QNX 9
1.4 嵌入式系统选型 9
小结 10
第2章 基于ARM9处理器的硬件开发平台 11
2.1 ARM处理器简介 11
2.1.1 ARM公司简介 11
2.1.2 ARM微处理器核 11
2.2 ARM9微处理器简介 15
2.2.1 与ARM7处理器的比较 15
2.2.2 三星S3C2410X处理器详解 16
小结 51
第3章 调试嵌入式系统程序 52
3.1 嵌入式系统调试方法 52
3.1.1 实时在线仿真 52
3.1.2 模拟调试 53
3.1.3 软件调试 53
3.1.4 BDM/JTAG调试 53
3.2 ARM仿真器 54
3.2.1 techorICETM ARM仿真器 54
3.2.2 ARM仿真器工作原理 55
3.2.3 ARM仿真器的系统功能层次 56
3.2.4 使用仿真器和ADS Debugger调试ARM开发板 57
3.3 JTAG接口 61
3.3.1 JTAG引脚定义 62
3.3.2 通过JTAG烧写Flash 62
3.3.3 烧写Flash技术内幕 66
小结 75
第4章 创建嵌入式系统开发环境 76
4.1 嵌入式Linux的开发环境 76
4.2 Cygwin 77
4.3 交叉编译的预备知识 80
4.3.1 Make命令和Makefile文件 80
4.3.2 binutils工具包 80
4.3.4 glibc库 81
4.3.3 gcc编译器 81
4.3.5 gdb调试工具 83
4.4 交叉编译 84
4.4.1 创建编译环境 85
4.4.2 创建binutils 87
4.4.3 创建gcc 88
4.4.4 创建glibc 89
4.4.5 创建gdb 90
4.4.6 第二次创建gcc 91
4.4.7 第二次创建glibc 92
4.4.8 成果 92
小结 94
5.1.1 初识Bootloader 95
第5章 Bootloader 95
5.1 嵌入式系统的引导代码 95
5.1.2 Bootloader的启动流程 97
5.2 Bootloader之vivi 98
5.2.1 vivi简介 98
5.2.2 vivi的配置与编译 98
5.2.3 vivi代码导读 99
5.3 Bootloader之U-Boot 113
5.3.1 U-Boot代码结构分析 113
5.3.2 编译U-Boot代码 114
5.3.3 U-Boot代码导读 114
小结 125
5.3.4 U-Boot命令 125
第6章 Linux系统在ARM平台的移植 126
6.1 移植的概念 126
6.2 Linux内核结构 126
6.3 Linux操作系统移植 128
6.3.1 根目录 128
6.3.2 arch目录 129
6.3.3 arch/arm/boot目录 131
6.3.4 arc/arm/def-configs目录 132
6.3.5 arch/arm/kernel目录 132
6.3.6 arch/arm/mm目录 134
6.4 编译Linux内核 135
6.3.7 arch/arm/mach-s3c2410目录 135
小结 137
第7章 Linux设备驱动程序开发 138
7.1 设备驱动概述 138
7.1.1 设备驱动和文件系统的关系 138
7.1.2 设备类型分类 139
7.2 设备驱动基础 141
7.2.1 设备驱动中关键数据结构 141
7.2.2 设备驱动开发中的基本函数 144
7.2.3 驱动程序的设备号 147
7.2.4 设备入口点 148
7.2.5 /proc文件系统 149
7.3 设备驱动模块化编程 150
7.3.1 内核空间和用户空间 151
7.3.2 GPIO字符设备驱动实例 151
7.4 PCI总线 156
7.4.1 PCI系统体系结构 157
7.4.2 PCI地址空间 158
7.4.3 PCI设备驱动开发实例 159
小结 175
第8章 网络设备驱动程序开发 176
8.1 网络设备驱动程序简介 176
8.1.1 device数据结构 177
8.1.2 sk_buff数据结构 181
8.1.3 内核的驱动程序接口 183
8.2 以太网控制器CS8900A 184
8.3 网络设备驱动程序实例 188
8.3.1 初始化函数 188
8.3.2 打开函数 194
8.3.3 关闭函数 197
8.3.4 发送函数 197
8.3.5 接收函数 198
8.3.6 中断处理函数 201
小结 203
9.1 USB驱动程序简介 204
9.1.1 USB背景知识 204
第9章 USB驱动程序开发 204
9.1.2 Linux内核对USB规范的支持 205
9.1.3 OHCI简介 205
9.2 Linux下USB系统文件结点 215
9.3 USB主机驱动结构 216
9.3.1 USB数据传输时序 218
9.3.2 USB设备连接/断开时序 218
9.4 主要数据结构及接口函数 220
9.4.1 数据传输管道 220
9.4.2 统一的USB数据传输块 220
9.4.3 USBD数据描述 222
9.4.4 USBD与HCD驱动程序接口 223
9.4.5 USBD层的设备管理 226
9.4.6 设备类驱动与USBD接口 227
9.5 USBD文件系统接口 237
9.5.1 设备驱动程序访问 237
9.5.2 设备拓扑访问 239
9.5.3 设备信息访问 244
9.6 设备类驱动与文件系统接口 245
9.7 USB HUB驱动程序 245
9.7.1 HUB驱动初始化 245
9.7.2 HUB Probe相关函数 246
9.8 OHCI HCD实现 248
9.8.1 OHCI驱动初始化 248
9.8.2 与USBD连接 248
9.8.3 OHCI根HUB 252
9.9 扫描仪设备驱动程序 256
9.9.1 USBD接口 256
9.9.2 文件系统接口 258
9.10 USB主机驱动在S3C2410X平台的实现 260
9.10.1 USB主机控制器简介 260
9.10.2 驱动程序的移植 261
小结 261
第10章 图形用户接口 262
10.1 嵌入式系统中的GUI简介 262
10.1.1 MicroWindows 262
10.1.3 Qt/Embedded 263
10.1.2 MiniGUI 263
10.2 MiniGUI编程 264
10.2.1 MiniGUI移植 265
10.2.2 MiniGUI编程 268
10.3 初识Qt/Embedded 271
10.3.1 Qt介绍 272
10.3.2 系统要求 272
10.3.3 Qt的架构 273
10.4 Qt/Embedded嵌入式图形开发基础 275
10.4.1 建立Qt/Embedded开发环境 275
10.4.2 认识Qt/Embedded开发环境 277
10.4.3 窗体 280
10.4.4 对话框 288
10.4.5 外形与感觉 292
10.4.6 国际化 294
10.5 Qt/Embedded实战演练 295
10.5.1 安装Qt/Embedded工具开发包 296
10.5.2 交叉编译Qt/Embedded库 296
10.5.3 Hello,World 297
10.5.4 发布Qt/Embeded程序到目标板 305
10.5.5 添加一个Qt/Embedded应用到QPE 307
小结 309
第11章 系统设计开发 310
11.1 概述 310
11.2 硬件功能的实现 311
11.2.1 功能定义 312
11.2.2 原理图设计 314
11.2.3 PCB设计 326
11.2.4 硬件调试 328
11.3 软件功能的实现 328
11.3.1 嵌入式文件系统 328
11.3.2 MTD简介 338
11.3.3 RAMDISK 341
11.3.4 Busybox 342
11.3.5 系统初始化 343
小结 347
参考文献 348