第1章 引言 1
1.1 概要 1
1.2 相关的文件资源 1
1.3 VxWorks配置和建立 2
1.4 Wind River代码约定 2
1.5 文档约定 2
第2章 基本操作系统 5
2.1 简介 5
2.2 VxWorks任务 5
2.2.1 多任务 5
2.2.2 任务状态转变 6
2.2.3 Wind任务调度 7
2.2.4 任务控制 10
2.2.5 任务扩展函数 15
2.2.6 任务的错误状态:errno 16
2.2.7 任务异常处理 18
2.2.8 共享代码和重入 18
2.2.9 VxWorks操作系统任务 22
2.3 任务间通信 23
2.3.1 共享数据结构 24
2.3.2 互斥 24
2.3.3 信号量 25
2.3.4 消息队列 35
2.3.5 管道 39
2.3.6 任务间网络通信 40
2.3.7 信号 41
2.4 VxWorks事件 42
2.4.1 pSOS事件 43
2.4.2 VxWorks事件 44
2.4.3 API比较 47
2.5 看门狗定时器 47
2.6 中断服务代码:中断服务程序 48
2.6.1 中断处理连接程序 49
2.6.2 中断堆栈 50
2.6.3 编写和调试中断服务程序 50
2.6.4 中断服务程序的特殊限制 50
2.6.5 中断级异常 52
2.6.6 保留高中断级 52
2.6.7 在高中断级上中断服务程序的附加限制 52
2.6.8 中断与任务通信 53
第3章 POSIX标准接口 54
3.1 简介 54
3.2 POSIX时钟和计时器 54
3.3 POSIX内存上锁接口 55
3.4 POSIX线程 56
3.4.1 POSIX线程属性 56
3.4.2 线程私用数据 59
3.4.3 线程取消 59
3.5 POSIX调度接口 60
3.5.1 POSIX和Wind调度方法比较 61
3.5.2 获得和设置POSIX任务优先级 61
3.5.3 获得并显示当前调度策略 63
3.5.4 获得调度参数:优先级限制和时间片 63
3.6 POSIX信号量 64
3.6.1 POSIX和Wind信号量比较 65
3.6.2 未命名信号量使用 66
3.6.3 命名信号量的使用 68
3.7 POSIX互斥体(Mutexes)和条件变量 71
3.8 POSIX消息队列 72
3.8.1 POSIX和Wind消息队列比较 73
3.8.2 POSIX消息队列属性 73
3.8.3 显示消息队列属性 76
3.8.4 用消息队列通信 77
3.8.5 通知任务有消息在等待 80
3.9 POSIX队列信号 84
第4章 输入/输出系统 86
4.1 简介 86
4.2 文件、设备和驱动程序 87
4.2.1 文件名称和默认设备类型 88
4.3 基本I/O接口 89
4.3.1 文件描述符 89
4.3.2 标准输入设备、标准输出设备和标准错误输出设备 90
4.3.3 打开和关闭文件操作 91
4.3.4 新建和删除文件操作 92
4.3.5 读操作和写操作 92
4.3.6 文件截取操作 93
4.3.7 I/O控制操作 93
4.3.8 基于多文件描述符的挂起操作:选择功能 94
4.4 缓冲型I/O设备:stdio 97
4.4.1 使用stdio设备 97
4.4.2 标准输入设备、标准输出设备和标准错误输出设备 98
4.5 其他格式化I/O操作 98
4.5.1 特例:printf(),sprintf()和sscanf()函数 98
4.5.2 其他函数:printErr()和fdprintf()函数 99
4.5.3 信息记录 99
4.6 异步输入/输出操作 99
4.6.1 POSIX标准的异步输入/输出程序 100
4.6.2 异步输入/输出操作控制块 101
4.6.3 使用异步输入/输出操作 102
4.7 VxWorks操作系统中的设备 107
4.7.1 串行I/O设备(终端和伪终端设备) 108
4.7.2 管道设备 111
4.7.3 伪存储设备 112
4.7.4 网络文件系统(NFS)设备 113
4.7.5 非NFS网络设备 114
4.7.6 CBIO接口 115
4.7.7 块存取设备 118
4.7.8 套接字 128
4.8 VxWorks操作系统与主机操作系统中I/O系统的区别 128
4.9 内部结构 129
4.9.1 驱动程序 132
4.9.2 驱动设备 133
4.9.3 文件描述符 135
4.9.4 块存取设备 146
4.9.5 驱动程序支持库 159
4.10 PCMCIA接口 159
4.11 外部设备互连接口:PCI 160
第5章 本地文件系统 161
5.1 简介 161
5.2 与MS-DOS兼容的文件系统:dosFs文件系统 161
5.2.1 建立dosFs文件系统 162
5.2.2 配置用户系统 164
5.2.3 初始化dosFs文件系统 165
5.2.4 创建块存取设备 165
5.2.5 创建磁盘高速缓冲区 165
5.2.6 创建和使用磁盘分区 165
5.2.7 创建dosFs文件系统设备 168
5.2.8 格式化磁盘卷 168
5.2.9 安装磁盘卷 170
5.2.10 例子 170
5.2.11 对磁盘和磁盘卷进行操作 178
5.2.12 目录操作 179
5.2.13 文件操作 180
5.2.14 分配磁盘空间的方法 182
5.2.15 灾难恢复和磁盘卷的一致性问题 185
5.2.16 dosFsLib文件支持的I/O控制功能 185
5.3 使用SCSI设备从本地dosFs文件系统启动 186
5.4 原始文件系统:rawFs文件系统 188
5.4.1 磁盘组织形式 189
5.4.2 初始化rawFs文件系统 189
5.4.3 将设备初始化成使用rawFs文件系统 189
5.4.4 安装磁盘卷 190
5.4.5 文件I/O操作 190
5.4.6 更换磁盘 191
5.4.7 rawFsLib文件支持的I/O控制功能 192
5.5 磁带文件系统:tapeFs文件系统 193
5.5.1 磁带中的组织结构 193
5.5.2 初始化tapeFs文件系统 193
5.5.3 安装磁带卷 196
5.5.4 文件I/O操作 196
5.5.5 更换磁盘 196
5.5.6 tapeFsLib文件支持的I/O控制功能 197
5.6 CD-ROM文件系统:cdromFs 198
5.7 目标服务器文件系统:TSFS 201
第6章 目标机工具 204
6.1 简介 204
6.2 基于目标机的shell 204
6.2.1 主机和目标机shell的不同 204
6.2.2 用目标机shell配置VxWorks 206
6.2.3 使用目标机shell的帮助和控制字符 206
6.2.4 从目标机shell加载和卸载目标模块 207
6.2.5 调试目标机shell 208
6.2.6 终止目标机shell正在执行的程序 208
6.2.7 使用远程登录进入目标机shell 209
6.2.8 分配Demangler 210
6.3 基于目标机的加载器 210
6.3.1 配置VxWorks加载器 211
6.3.2 目标机-加载器API 212
6.3.3 加载器选项总结 213
6.3.4 加载C++模块 214
6.3.5 指定加载模块的内存分配 214
6.3.6 影响加载器行为的限制 215
6.4 基于目标机的符号表 219
6.4.1 配置VxWorks系统符号表 219
6.4.2 生成一个内部系统符号表 221
6.4.3 生成一个可下载的系统符号表 222
6.4.4 使用VxWorks系统符号表 222
6.4.5 基于主机和目标机的符号表同步化 223
6.4.6 生成用户符号表 224
6.5 显示函数 224
6.6 常见问题 225
第7章 C++语言开发 229
7.1 简介 229
7.2 在VxWorks系统下使用C++语言 229
7.2.1 实现C++语言访问的C语言代码 229
7.2.2 加入支持组件 230
7.2.3 C++组合器 231
7.3 初始化和确定静态目标 231
7.3.1 细化(munch)C++应用模块 231
7.3.2 交互式调用静态构造体和析构体 233
7.4 使用GNUC++编程 234
7.4.1 模板实例化 234
7.4.2 异常处理 237
7.4.3 Run-Time类型信息 238
7.4.4 命名空间(Namespaces) 239
7.5 使用Diab C++编程 240
7.5.1 模板实例化 241
7.5.2 异常处理 241
7.5.3 Run-Time类型信息 242
7.6 使用C++库 242
7.7 运行事例演示 243
第8章 闪存块设备驱动程序 245
8.1 简介 245
8.1.1 选择TrueFFS作为媒质 245
8.1.2 TrueFFS层 246
8.2 构建支持TrueFFS的系统 247
8.3 选择MTD组件 248
8.4 确定Socket驱动程序 249
8.5 配置和建立项目 249
8.5.1 包含文件系统组件 250
8.5.2 包含核心组件 250
8.5.3 包含应用程序组件 250
8.5.4 包含MTD组件 252
8.5.5 包含转换层 252
8.5.6 加入Socket驱动程序 253
8.5.7 建立系统项目 253
8.6 设备格式化 254
8.6.1 规定驱动器号 254
8.6.2 对设备进行格式化 254
8.7 创建用于编写启动镜像的区域 256
8.7.1 写保护闪存 256
8.7.2 创建启动镜像区域 256
8.7.3 在闪存中编写启动镜像 258
8.8 安装驱动器 258
8.9 运行shell命令 259
8.10 编写Socket驱动程序 261
8.10.1 传送Socket驱动程序存根文件 261
8.10.2 理解Socket驱动程序功能 264
8.11 使用MTD支持的闪存设备 267
8.11.1 支持常用闪存接口(CFI) 267
8.11.2 支持其他的MTD 269
8.11.3 获得片上磁盘的支持 270
8.12 编写MTD组件 270
8.12.1 编写MTD识别函数 271
8.12.2 编写MTD映射函数 273
8.12.3 编写MTD读、写和擦除函数 274
8.12.4 定义MTD为组件 277
8.12.5 注册识别函数 278
8.13 闪存功能 279
8.13.1 块分配以及数据串 279
8.13.2 读和写操作 280
8.13.3 擦除循环和碎片收集 280
8.13.4 优化方式 281
8.13.5 TrueFFS中的故障恢复 283
第9章 VxDCOM应用 285
9.1 简介 285
9.2 COM技术概述 286
9.2.1 COM组件和软件可重用性 286
9.2.2 VxDCOM和实时分布式技术 287
9.3 使用Wind目标模板库 288
9.3.1 WOTL模板类的分类 289
9.3.2 CoClass真模板类 289
9.3.3 Lightweight对象类模板 291
9.3.4 单一实例类宏 291
9.4 阅读WOTL-生成的代码 292
9.4.1 WOTL CoClass定义 292
9.4.2 生成文件中使用的宏定义 293
9.4.3 接口映射 294
9.5 配置DCOM性能参数 295
9.6 使用Wind IDL编译器 297
9.6.1 命令行格式 297
9.6.2 已生成代码 298
9.6.3 数据类型 298
9.7 阅读IDL文件 302
9.7.1 IDL文件结构 302
9.7.2 定义属性 306
9.8 增加实时扩展 308
9.8.1 使用VxWorks上的优先级方案 308
9.8.2 在Windows上配置客户端优先级传送 309
9.8.3 使用线程集合Threadpools 310
9.9 使用OPC接口 310
9.10 编写VxDCOM服务器和客户端应用 311
9.10.1 编程 311
9.10.2 编写服务程序 311
9.10.3 编写客户端代码 313
9.10.4 询问服务器 316
9.10.5 执行客户端代码 319
9.11 比较VxDCOM和ATL执行 319
9.11.1 CcomObjectRoot 320
9.11.2 CcomClassFactory 320
9.11.3 CcomCoClass 321
9.11.4 CcomObject 322
9.11.5 CComPtr 323
9.11.6 CComBSTR 324
9.11.7 VxComBSTR 325
9.11.8 CcomVariant 326
第10章 分布式信息队列 329
10.1 简介 329
10.2 用VxFusion配置VxWorks 330
10.3 使用VxFusion 330
10.3.1 VxFusion的系统结构 330
10.3.2 VxFusion的初始化 333
10.3.3 配置VxFusion 333
10.3.4 分布式名称数据库 336
10.3.5 操作分布式信息队列 339
10.3.6 操作组信息队列 344
10.3.7 操作适配器 346
10.4 系统局限性 347
10.5 节点启动 347
10.6 报文和消息 349
10.6.1 报文与消息比较 349
10.6.2 报文缓冲器 350
10.7 设计适配器 351
10.7.1 设计网络报头 351
10.7.2 写一个初始化程序 352
10.7.3 写一个启动程序 355
10.7.4 写一个发送程序 355
10.7.5 写一个输入程序 356
10.7.6 写一个I/O控制程序 357
第11章 共享内存对象 358
11.1 简介 358
11.2 使用共享内存对象 358
11.2.1 名称数据库 359
11.2.2 共享信号量 361
11.2.3 共享消息队列 364
11.2.4 共享内存分配器 369
11.3 内部需注意的事项 377
11.3.1 系统要求 377
11.3.2 旋转上锁机制 378
11.3.3 中断延迟 378
11.3.4 约束 379
11.3.5 高速缓存一致性 379
11.4 配置 379
11.4.1 共享内存对象和共享内存网络驱动 380
11.4.2 共享内存区 380
11.4.3 初始化共享内存对象包 381
11.4.4 配置举例 384
11.4.5 初始化步骤 385
11.5 发现故障及解决措施 385
11.5.1 配置问题 385
11.5.2 发现并解决故障的技巧 386
第12章 虚拟内存接口 387
12.1 简介 387
12.2 基本虚拟内存支持 387
12.3 虚拟内存配置 388
12.4 普通应用 389
12.5 使用程序化的MMU 390
12.5.1 虚拟内存上下文 390
12.5.2 私有虚拟内存 391
12.5.3 非高速缓存存储区 399
12.5.4 非可写存储器 400
12.5.5 故障检验 402
12.5.6 需警惕的问题 403