第一部分 ARM Linux系统移植 2
第1章 嵌入式系统开发入门 2
1.1 嵌入式系统介绍 2
1.1.1 嵌入式系统概述 2
1.1.2 嵌入式系统组成 4
1.2 ARM介绍 5
1.2.1 ARM处理器介绍 5
1.2.2 ARM处理器的选型 6
1.2.3 S3C2410微处理器介绍 7
1.3 ADS集成开发环境介绍 8
1.3.1 ADS软件组成 8
1.3.2 使用Code Warrior IDE 13
1.3.3 使用AXD IDE 16
1.4 嵌入式Linux开发介绍 19
1.4.1 Linux历史 19
1.4.2 Linux开发环境 20
1.4.3 GCC介绍 21
1.4.4 GNU Make介绍 23
1.4.5 GDB介绍 26
1.4.6 ARM Linux系统开发流程 29
1.5 Linux内核介绍 30
1.5.1 Linux内核目录结构 31
1.5.2 如何阅读Linux内核源代码 33
1.6 本章小结 34
1.7 常见问题 34
第2章 交叉编译工具链的构建 36
2.1 交叉编译工具链介绍 36
2.2 构建ARM Linux交叉编译工具链 36
2.2.1 分步构建交叉编译链 37
2.2.2 用Crosstool工具构建交叉工具链 43
2.3 本章小结 46
2.4 常见问题 46
第3章 嵌入式系统的BootLoader 48
3.1 BootLoader概述 48
3.2 常用的嵌入式Linux BootLoader 49
3.2.1 U-Boot 49
3.2.2 VIVI 50
3.2.3 Blob 51
3.2.4 RedBoot 51
3.2.5 ARMboot 51
3.2.6 DIY 51
3.3 基于S3C2410开发板的BootLoader实现 52
3.3.1 S3C2410开发板介绍 52
3.3.2 U-Boot分析与移植 53
3.4 基于S3C2410开发板自己编写BootLoader 77
3.4.1 设计系统的启动流程 77
3.4.2 BootLoader的具体实现 78
3.5 本章小结 84
3.6 常见问题 85
第4章 嵌入式Linux内核移植 86
4.1 移植的基本概念 86
4.2 内核移植的准备 87
4.3 内核移植 88
4.3.1 内核配置 88
4.3.2 内核编译 97
4.3.3 内核下载 98
4.4 建立Linux根文件系统 98
4.4.1 根文件系统的基本介绍 99
4.4.2 建立根文件系统 102
4.5 本章小结 105
4.6 常见问题 106
第二部分 ARM Linux设备驱动程序开发 110
第5章 ARM Linux驱动程序开发入门 110
5.1 嵌入式Linux驱动程序介绍 110
5.1.1 驱动程序的作用 110
5.1.2 Linux设备驱动程序分类 111
5.2 最简单的内核模块举例 112
5.2.1 编写Hello World模块 113
5.2.2 编写Hello World模块的Makefile 114
5.2.3 加载和卸载Hello World模块 115
5.3 Linux驱动程序开发要点 116
5.3.1 内存与I/O端口 116
5.3.2 并发控制 120
5.3.3 阻塞与非阻塞 125
5.3.4 中断处理 126
5.3.5 内核调试 133
5.4 本章小结 137
5.5 常见问题 137
第6章 字符设备驱动程序 139
6.1 字符设备驱动介绍 139
6.1.1 字符设备驱动相关的重要结构 139
6.1.2 主、次设备号 145
6.2 字符设备驱动开发实例 148
6.2.1 四线电阻式触摸屏原理 148
6.2.2 S3C2410触摸屏工作原理 149
6.2.3 S3C2410的ADC和触摸屏接口特殊寄存器 150
6.2.4 触摸屏驱动概要设计 154
6.2.5 触摸屏驱动程序分析 155
6.2.6 配置和编译驱动程序 164
6.2.7 测试触摸屏驱动程序 165
6.2.8 触摸屏的校准 166
6.3 本章小结 167
6.4 常见问题 167
第7章 块设备驱动程序 169
7.1 块设备驱动介绍 169
7.1.1 块设备驱动相关的重要结构 169
7.1.2 请求处理 174
7.2 块设备驱动开发实例 176
7.2.1 MMC/SD介绍 176
7.2.2 S3C2410提供的SDI接口 179
7.2.3 SDI相关的寄存器 180
7.2.4 MMC/SD驱动概要设计 184
7.2.5 MMC驱动程序分析 186
7.2.6 S3C2410 SDI接口驱动分析 192
7.2.7 配置和编译驱动程序 193
7.3 本章小结 194
7.4 常见问题 194
第8章 网络设备驱动程序 195
8.1 网络设备驱动介绍 195
8.1.1 网络设备驱动相关的重要结构 195
8.1.2 常见的网络术语 198
8.2 网络设备驱动开发实例 200
8.2.1 CS8900A介绍 200
8.2.2 CS8900A网卡驱动概要设计 202
8.2.3 CS8900A适配器驱动程序分析 204
8.3 本章小结 213
8.4 常见问题 214
第三部分 Qt GUI开发 216
第9章 Qt概述 216
9.1 Linux下的GUI介绍 216
9.1.1 Linux桌面GUI系统 216
9.1.2 嵌入式Linux下的GUI系统 220
9.2 Qt/X11介绍 221
9.2.1 Qt的历史和Qt/X11的由来 221
9.2.2 Qt/X11的版权问题 222
9.2.3 Qt/X11及Qt/Windows的系统架构图对比 222
9.2.4 Qt的特性简介 222
9.3 Qtopia Core介绍 223
9.3.1 Qtopia Core与Qt/Embedded 223
9.3.2 Qtopia Core的体系结构 224
9.4 本章小结 225
9.5 常见问题 225
第10章 Qt/X11初步 226
10.1 Qt/X11的安装 226
10.1.1 Qt/X11的下载及双重授权问题的说明 226
10.1.2 Qt/X11的安装详解 227
10.2 Qt下的Hello World 229
10.3 温度转换的小例子 230
10.3.1 背景知识 230
10.3.2 Quit按钮 231
10.3.3 摄氏温度的显示 234
10.3.4 华氏温度的显示 237
10.3.5 华氏温度和摄氏温度之间的转换 240
10.3.6 保存当前的数值 244
10.4 本章小结 249
10.5 常见问题 249
第11章 Qt核心技术 251
11.1 信号(Signals)和槽(Slots) 251
11.1.1 常见的GUI组件通信方式 251
11.1.2 Qt中的信号和槽(Signals and Slots) 254
11.1.3 自定义信号和槽的小例子 256
11.2 Qt对象模型 259
11.2.1 元对象系统 259
11.2.2 信号和槽机制的实现 266
11.2.3 元对象编译器moc 275
11.3 Qt的窗口系统 279
11.3.1 窗口部件之间的树型结构 279
11.3.2 窗口部件的布局管理 281
11.4 国际化 285
11.4.1 Qt国际化的基本步骤 285
11.4.2 动态改变语言的小例子 286
11.4.3 一些注意事项 291
11.5 本章小结 293
11.6 常见问题 293
第12章 Qtopia Core 294
12.1 Qtopia Core的安装 294
12.2 Frame Buffer和qvfb 295
12.2.1 Frame Buffer 296
12.2.2 编译qvfb 298
12.2.3 在qvfb上运行Qtopia Core程序 298
12.3 移植Qt/X11程序到Qtopia Core中 299
12.4 轻量级的窗口系统 301
12.5 进程间通信 304
12.6 本章小结 307
12.7 常见问题 307
参考文献 309