第1章 Windows CE驱动简介 1
1.1 什么是驱动 1
1.1.1 驱动的概念 1
1.1.2 驱动的角色 2
1.2 驱动的种类 2
1.2.1 单层驱动和分层驱动 2
1.2.2 内置驱动和流驱动 4
1.2.3 用户和内核模式驱动 5
1.3 何时需要驱动 6
1.4 驱动开发的步骤 6
1.5 Windows CE共享的驱动代码 7
第2章 Windows CE下驱动程序的中断处理 8
2.1 Windows CE中断的相关概念 8
2.2 中断处理 9
2.2.1 中断服务 9
2.2.2 中断屏蔽 10
2.2.3 嵌套中断处理 10
2.2.4 共享中断处理 10
2.2.5 中断处理过程分析 11
2.2.6 配置、注册、并撤消一个中断处理程序 13
2.3 中断服务例程 14
2.3.1 安装ISR和设备驱动程序 15
2.3.2 安装一个ISR并等待中断事件的产生 16
2.3.3 编译一个ISR错误分析 16
2.3.4 安装ISR和内核 17
2.4 中断服务线程(IST) 22
2.5 中断通知 25
第3章 Windows CE下驱动程序的管理 27
3.1 设备管理器的角色 27
3.2 设备管理器的架构 28
3.3 设备管理器相关注册表键 31
3.4 设备文件名称 31
3.5 I/O资源管理器 33
3.6 设备管理器相关API介绍 35
3.6.1 设备管理器枚举类型 35
3.6.2 设备管理器常用函数介绍 36
第4章 Windows CE下驱动程序的访问控制 37
4.1 DMA 37
4.1.1 Windows CE传统处理方法 37
4.1.2 Windows CE处理DMA的新方法 38
4.2 驱动程序的内存访问 40
4.3 总线无关驱动程序 43
4.4 总线相关驱动程序 48
4.4.1 总线命名 49
4.4.2 总线驱动相关注册表键介绍 49
4.4.3 总线驱动电源回调 50
4.5 总线枚举器 51
4.6 设备接口类 52
4.7 设备接口通知 54
第5章 Windows CE下流接口驱动程序设计方法 57
5.1 流接口驱动程序简介 57
5.2 流接口驱动程序架构 58
5.3 流接口驱动程序的实现 58
5.3.1 流接口驱动程序入口点 58
5.3.2 单通道和多通道 59
5.4 流接口函数介绍 59
5.5 开发一个标准流驱动程序的完整流程 63
5.5.1 创建驱动STD 63
5.5.2 注册表中注册设备驱动程序 68
5.5.3 将设备驱动程序打包到Windows CE的镜像文件中 69
5.5.4 创建设备驱动程序的.def文件 69
5.5.5 编写驱动测试程序 70
5.6 编写串口驱动程序 72
5.6.1 串口工作原理分析 72
5.6.2 编写串口驱动程序的准备工作 73
5.6.3 填写相关流接口函数 74
5.6.4 小结 75
第6章 Windows CE驱动程序的调试方法 76
6.1 使用CETK测试一个驱动程序的必要软硬件条件 76
6.2 使用CETK测试一个驱动程序的完整过程 77
6.2.1 使用CETK提供的模块测试设备驱动程序 77
6.2.2 使用自定义的模块测试设备驱动程序 86
第7章 编写GPIO驱动程序 95
7.1 Vortex86SX SoC简介 95
7.2 GPIO相关概念介绍 95
7.2.1 GPIO的概念 95
7.2.2 GPIO的特性 96
7.2.3 Vortex86SX的GPIO简介 96
7.2.4 Vortex86SX的GPIO相关寄存器介绍 97
7.3 GPIO驱动程序的编写 98
7.3.1 GPIO工作流程分析 98
7.3.2 编写串口驱动程序的准备工作 98
7.3.3 填写相关流接口函数 98
7.3.4 创建.def的文件 100
7.3.5 在注册表中注册GPID驱动程序 100
7.3.6 编写GPID驱动的测试程序 101
7.4 编写完标准GPIO驱动程序后的反思 102
7.4.1 GPIO驱动程序的另一种写法 102
7.4.2 用C#使用GPIO(调用SX_GPIO.DLL) 104
7.5 小结 110
第8章 编写看门狗驱动程序 111
8.1 看门狗简介 111
8.1.1 看门狗的概念 111
8.1.2 看门狗的工作原理 112
8.1.3 看门狗的操作流程 112
8.2 eBox2300SX看门狗介绍 113
8.2.1 Vortex86SX第一只内置看门狗WDT0介绍 113
8.2.2 Vortex86SX第二只内置看门狗WDT1介绍 118
8.3 编写看门狗驱动程序 121
8.3.1 Vortex86SX内置看门狗工作流程分析 121
8.3.2 创建Windows CE驱动工程 122
8.3.3 实现Vortex86SX内置看门狗驱动程序 123
8.3.4 创建.def的文件 125
8.3.5 编写WDT_DLL驱动子工程的注册表文件 126
8.3.6 编写WDT_DLL驱动子工程的WDT_DLL.bib文件 126
8.3.7 编写WDT_DLL驱动子工程的Sources文件 126
8.3.8 编译WDT_DLL驱动程序子工程 127
第9章 编写音频驱动程序 128
9.1 音频驱动开发基础 128
9.1.1 音频压缩管理器驱动程序 129
9.1.2 音频驱动的MDD层和PDD层 131
9.1.3 可插拔的编/解码器的要求 132
9.1.4 统一音频模型 133
9.1.5 Wavedev2音频驱动模型 135
9.2 音频驱动程序注册表设置 136
9.2.1 ACM驱动程序的注册表设置 136
9.2.2 软混频器注册表设置 136
9.3 音频驱动移植 137
9.4 音频驱动实例 137
9.4.1 ACM驱动程序实例 137
9.4.2 Wavedev驱动程序 153
9.5 音频驱动相关函数、结构体、消息介绍 154
第10章 编写块驱动程序 157
10.1 块设备驱动程序开发基础 157
10.1.1 块驱动架构 157
10.1.2 块驱动管理器 157
10.1.3 块设备文件系统 157
10.1.4 块驱动程序接口 158
10.1.5 加载块驱动程序 158
10.1.6 安装块驱动程序 159
10.1.7 侦测块驱动程序 159
10.1.8 访问块驱动程序 159
10.1.9 块设备的电源循环处理 159
10.2 块驱动程序注册表设置 160
10.2.1 自动加载块设备的名称限制 160
10.2.2 PC卡接口块驱动注册表设置 160
10.2.3 内置块驱动的注册表键设置 161
10.2.4 ATAPI块驱动注册表键设置 161
10.2.5 SD卡注册表设置 168
10.2.6 硬盘驱动程序的命名 168
10.3 块驱动程序实例 168
10.3.1 ATADISK磁盘驱动实例 168
10.3.2 ATAPI驱动实例 171
第11章 移植Windows CE其他版本的驱动到Windows CE 6.0 186
11.1 驱动移植访问权限的确认 187
11.2 驱动移植的Marshalling 188
11.3 驱动移植的安全复制 191
11.4 驱动移植的线程访问许可 191
11.5 驱动移植的用户接口 192
11.6 驱动程序的移植实例 192
第12章 板级支持包 194
12.1 BSP基本概念 194
12.1.1 BSP的由来 194
12.1.2 BSP的构成 194
12.2 Boot Loader 195
12.3 OAL 195
12.4 运行时镜像的配置文件 195
12.5 设备驱动程序 196
12.5.1 SoC驱动程序 197
12.5.2 BSP驱动程序 197
12.5.3 通用驱动程序 198
12.6 如何创建一个BSP 198
12.6.1 从零开始开发个人化BSP的流程 199
12.6.2 通过克隆相似平台的BSP开发个人BSP的流程 207
第13章 Windows CE下Boot Loader的分析 211
13.1 Boot Loader应该具备的功能 211
13.2 Boot Loader开发时考虑的硬件因素 212
13.3 Windows CE镜像的引导模式 212
13.3.1 Boot Loader引导模式 212
13.3.2 非Boot Loader引导模式 213
13.4 以太网下的Boot Loader 214
13.4.1 以太网下Boot Loader代码的执行 214
13.4.2 启动和初始化代码的执行 217
13.4.3 构建Boot Loader镜像相关文件 218
13.4.4 编译Boot Loader镜像 218
13.5 专用的Boot Loader 219
13.5.1 x86 BIOS Boot Loader 219
13.5.2 x86串口Boot Loader 228
13.5.3 x86 ROM Boot Loader 228
13.6 Boot Loader支持库 228
13.6.1 BLCOMMON代码库 228
13.6.2 eboot代码库 229
13.6.3 Bootpart代码库 229
13.6.4 以太网调试库 229
第14章 开发Boot Loader 231
14.1 Boot Loader的设计 231
14.2 设立命令行构建环境 232
14.3 为Boot Loader的StartUp()函数创建一个文件 233
14.4 创建Boot Loader的Makefile文件和Sources文件 233
14.5 编译Boot Loader源代码 234
14.6 实现Boot Loader的StartUp()函数 234
14.7 创建Boot Loader的Main()函数 236
14.8 为Boot Loader OEM函数创建占位程序 236
14.9 编辑Boot Loader的Sources文件 237
14.10 创建Boot Loader的.bib文件 237
14.11 重新构建Boot Loader 239
14.12 实现串口调试函数 239
14.13 创建驱动程序全局缓冲区和启动参数 242
14.14 实现OEMPlatformInit()函数 244
14.15 实现与以太网控制器相关的函数 251
14.16 实现OEMPreDownload()函数 253
14.17 为下载Windows CE镜像创建一个测试BIN文件并验证 256
14.18 实现OEMLaunch函数 256
14.19 Flash相关存储器函数的实现 261
14.19.1 OEMMapMemAddr()函数介绍 261
14.19.2 OEMWriteFlash()函数介绍 262
14.19.3 OEMIsFlashAddr()函数介绍 263
14.19.4 OEMShowProgress()函数介绍 263
14.19.5 Flash存储器擦除操作相关函数介绍 263
14.20 添加存储器确认支持 264
第15章 Windows CE下OAL的分析 266
15.1 内核架构分析 266
15.2 内核调度 267
15.2.1 线程调度计时器 267
15.2.2 内核全局变量调度 267
15.3 内核状态 268
15.3.1 挂起状态 268
15.3.2 OEM断电状态 269
15.3.3 唤醒状态 269
15.3.4 OEM唤醒状态 269
15.4 内核独立传输层 270
15.4.1 KITL传输通信 270
15.4.2 中断和轮询传输 270
15.4.3 KITL的工作模式 271
15.4.4 以太网调试服务 272
15.5 可变时钟调度器的实现 275
15.6 产品质量级OAL 277
第16章 如何开发OAL 279
16.1 Windows CE的OAL设计框架 279
16.1.1 OAL结构OEMGLOBAL分析 281
16.1.2 Kernel结构NKGLOBAL分析 286
16.2 OAL的启动过程分析 290
16.2.1 初始化CPU 290
16.2.2 内核初始化 292
16.2.3 初始化调试串口 298
16.2.4 初始化硬件平台 298
16.2.5 第一个线程调度前重新初始化内核 307
16.2.6 启动内核 307
16.2.7 第一线程调度后重新初始化内核 310
16.3 开发OAL的流程 311
第17章 创建Windows CE配置文件 342
17.1 源代码配置文件 342
17.1.1 Dirs文件 342
17.1.2 Makefile文件 343
17.1.3 Sources文件 344
17.2 CE镜像配置文件 350
17.2.1 二进制镜像构建文件 350
17.2.2 注册表文件 362
17.2.3 文件系统文件 366
17.2.4 数据库文件 367
第18章 项目实例——家庭智能化系统开发 370
18.1 定制Windows CE操作系统 370
18.1.1 新建一个项目工程 373
18.1.2 进入定制操作系统的向导 373
18.1.3 选择BSP 374
18.1.4 选择操作系统设计的模板 374
18.1.5 选择模板中的相关组件 375
18.1.6 添加Catalog组件 376
18.1.7 添加外部驱动程序 378
18.1.8 选择编译模式 379
18.1.9 选择Windows CE镜像的默认语言支持 380
18.1.10 选择编译选项 380
18.1.11 添加环境变量 381
18.1.12 关闭调试串口 382
18.1.13 生成Windows CE操作系统的镜像 384
18.1.14 下载Windows CE镜像到目标设备 385
18.2 家庭智能化应用程序的开发 388
18.2.1 为家庭智能化系统的开发安装SDK 388
18.2.2 开发家庭智能化系统的应用程序 390
参考文献 401
跋 402