第1部分 VxWorks的开发环境
第1章 使用Tornado 3
1.1 概述 3
1.2 Tornado的安装目录 4
1.3 创建一个工程 5
1.3.1 可加载工程和可引导工程 5
1.3.2 实例:创建可加载工程 6
1.3.3 实例:创建可引导工程 8
1.4 更加有效率地工作 9
1.4.1 开发环境基本设置 10
1.4.2 实例:设置一个更熟悉的编辑器 11
1.4.3 使用Tcl语言定义工具 12
第2章 编译工程——Builder 15
2.1 编译工程及Boot Rom 15
2.1.1 编译工程 15
2.1.2 编译Boot Rom 17
2.1.3 实例:制作软盘引导盘 18
2.1.4 深入1:批处理文件mkboot 20
2.1.5 深入2:制作U盘引导盘 21
2.1.6 深入3:制作硬盘引导盘 24
2.1.7 深入4:制作一个引导ROM 25
2.2 深入编译环境 26
2.2.1 创建的过程 26
2.2.2 抛弃IDE 27
2.2.3 使用Diab 28
2.3 了解MakeFile 29
2.3.1 MakeFile的作用 29
2.3.2 MakeFile格式 30
2.3.3 解决MakeFile所导致的错误 31
第3章 加载——FTP Server 33
3.1 FTP Server的设置 33
3.1.1 用户和权限 33
3.1.2 其他设置 34
3.1.3 实例:下载一个工程 34
3.2 从信息看状态 37
3.2.1 正常下载过程 37
3.2.2 下载失败的原因 38
3.3 从其他设备加载操作系统 39
第4章 管理工程——Work Space 41
4.1 管理文件 41
4.1.1 文件的位置 41
4.1.2 文件依赖关系 41
4.2 管理组件 42
4.2.1 VxWorks的各种组件 43
4.2.2 查找组件并修改属性 43
4.2.3 裁剪组件 44
4.3 编译选项 45
4.3.1 编译规则 45
4.3.2 宏定义 46
4.3.3 其他选项 47
第5章 连接目标机——Target Server 48
5.1 配置Target Server 48
5.1.1 基本配置内容 48
5.1.2 重要配置属性 49
5.2 实例:通过网络连接目标机 53
5.3 实例:配置串口连接主机 54
5.4 连接错误的解决办法 54
5.4.1 目标文件不正确 55
5.4.2 网络错误 55
5.4.3 目标机无响应 56
5.4.4 Target Server缓冲池不足 56
5.4.5 网络速度慢 56
第6章 交叉调试——Debugger 57
6.1 基本调试过程 57
6.1.1 运行Debugger 57
6.1.2 发起任务 58
6.1.3 连接任务 59
6.2 断点 60
6.2.1 设置断点 60
6.2.2 管理断点 60
6.3 独特的查看功能 62
6.3.1 源代码与汇编混合查看 62
6.3.2 调试命令行 63
6.3.3 其他功能 63
6.4 系统级调试设置 63
第7章 浏览目标机资源——Browser 65
7.1 Browser所提供的信息 65
7.1.1 Browser的设置 66
7.1.2 目标机信息 66
7.2 实例:透过现象看调试 67
7.2.1 查看内存泄露 67
7.2.2 分配任务优先级 68
7.2.3 确定任务堆栈 68
7.2.4 查看中断挂接情况 69
7.2.5 查看任务状况 70
第8章 与目标机的交互——Shell及其他 71
8.1 Shell 71
8.1.1 Shell的常用特性 71
8.1.2 Shell的快捷操作 72
8.1.3 Shell的常用命令 75
8.1.4 Shell的环境变量 77
8.1.5 执行脚本 77
8.2 WindView 78
8.2.1 设置WindView 79
8.2.2 分析任务时序图 80
8.3 Triggering 83
8.3.1 Triggering设置 84
8.3.2 Triggering的使用 85
第9章 软件硬件同时开发——VxSim 87
9.1 集成的VxSim 87
9.1.1 VxSim适用范围 87
9.1.2 VxSim的配置 88
9.1.3 VxSim的中断系统 90
9.2 功能更强的Full VxSim 90
9.2.1 Full VxSim所需的网络配置 90
9.2.2 创建支持网络连接的Full VxSim映像 91
9.2.3 启动Full VxSim 93
9.2.4 运行多个Full VxSim 95
9.3 实例:在VxSim上运行程序 95
第2部分 内核分析和应用程序开发
第10章 管理任务——任务的状态 101
10.1 任务概况 101
10.1.1 任务状态 101
10.1.2 任务调度 103
10.1.3 任务优先级 105
10.2 实例:生成、管理任务 105
10.2.1 任务控制API 106
10.2.2 销毁任务 107
10.2.3 控制任务状态的切换 107
10.3 深入:任务切换的深层原因 108
10.3.1 时钟中断和时间片调度 108
10.3.2 优先级抢占调度机制 110
10.3.3 任务控制块 111
第11章 任务间的交互——同步与通信 116
11.1 任务之间的交流 116
11.1.1 共享内存 116
11.1.2 互斥 120
11.1.3 信号量 121
11.1.4 消息队列和管道 125
11.1.5 使用网络的任务间通信 129
11.1.6 信号 130
11.2 实例:任务间交流 131
11.2.1 通过信号量实现互斥 131
11.2.2 信号量实现同步 133
11.2.3 管道与消息队列 134
11.3 其他通信手段 135
第12章 控制时间——系统计时 138
12.1 系统时间 138
12.1.1 系统时间的来源 138
12.1.2 与现实时间相联系 138
12.2 系统计时控制 139
12.3 看门狗计时器 142
12.3.1 实例1:看门狗计时 142
12.3.2 实例2:看门狗定时 143
12.3.3 实例3:看门狗延时 144
12.4 其他的计时方法 145
12.4.1 使用CPU时间戳计时 145
12.4.2 实例:计算CPU频率 146
第13章 存储信息——访问文件系统 148
13.1 VxWorks中的文件系统 148
13.1.1 操作文件的办法 148
13.1.2 实例:文件操作 151
13.1.3 打开文件的过程 154
13.1.4 读取文件的过程 155
13.1.5 文件系统的作用 156
13.1.6 文件系统的特殊功能 158
13.1.7 文件系统的安装流程 159
13.2 文件系统分析 160
13.2.1 dosFs 160
13.2.2 rawFs 163
13.2.3 cdromFs 164
13.2.4 tapeFs 166
13.3 深入:如何提高访问效率 166
13.4 实例:支持多硬盘分区 167
第14章 与外界的交互——控制硬件 169
14.1 驱动程序管理 169
14.1.1 文件、设备、驱动程序 169
14.1.2 驱动管理3张表 171
14.1.3 驱动及设备的管理 174
14.2 访问硬件的手段 175
14.2.1 创建设备 175
14.2.2 操作设备 177
14.3 操作硬件 179
14.3.1 实例:测试用程序 179
14.3.2 多设备异步通信——select 187
14.4 VxWorks中的隐含设备 189
第15章 联通的世界——访问网络 191
15.1 VxWorks中的网络组件 191
15.1.1 层次结构 191
15.1.2 基本组件 194
15.1.3 配置网络 194
15.1.4 操作路由表 200
15.1.5 Zbuf 202
15.1.6 使用标准I/O访问函数 204
15.2 实例:网络编程 204
15.2.1 建立TCP连接 204
15.2.2 建立UDP连接 210
15.2.3 使用Zbuf访问TCP 214
15.2.4 创建及使用FTP 217
第16章 VxWorks程序设计 221
16.1 资源 221
16.1.1 资源的有效利用 222
16.1.2 资源的保护 223
16.2 优先级安排 223
16.3 保证时间特性 224
第3部分 驱动开发与原理
第17章 硬件资源——操作硬件 229
17.1 硬件访问 229
17.1.1 内存访问 229
17.1.2 通用的内存映射程序 231
17.1.3 I/O端口访问 235
17.2 中断 236
17.2.1 轮询方式 236
17.2.2 中断 237
17.2.3 中断号与中断向量 240
17.2.4 中断复用 241
17.2.5 中断处理中的问题 242
17.3 访问特定硬件的API 243
17.3.1 访问PCI 243
17.3.2 中断相关的API 245
第18章 大道至简——字符设备 247
18.1 字符设备驱动程序 247
18.1.1 字符设备驱动程序的数据结构 248
18.1.2 字符设备驱动程序的接口 249
18.1.3 中断处理 257
18.1.4 安装驱动程序和创建设备 258
18.1.5 支持Select功能 260
18.2 实战字符设备开发 262
18.2.1 板卡介绍 262
18.2.2 程序实现 263
第19章 永久的记忆——块设备 281
19.1 块设备驱动程序的结构 281
19.2 块设备驱动程序的接口 283
19.3 安装块设备驱动程序 286
第20章 联通的基础——网络设备 287
20.1 网络设备的数据结构 288
20.2 网络设备接口层 290
20.2.1 endLoad 291
20.2.2 endUnload 293
20.2.3 endSend 293
20.2.4 endMCastAddrAdd、endMCastAddrGet和endMCastAddrDel 293
20.2.5 endPollSend、endPollReceive 294
20.2.6 endStart 295
20.2.7 endStop 295
20.2.8 endAddressForm 295
20.2.9 endAddrGet 296
20.2.10 endPacketDataGet 296
20.2.11 endIoctl 297
20.3 中断模式下接收数据 298
20.4 网络设备驱动程序的安装 299
第21章 USB设备——USB 1.1支持 301
21.1 USB工作过程 301
21.2 USB外设端协议栈 302
21.2.1 USB外设端协议栈结构 302
21.2.2 USB外设端协议栈实现 303
21.2.3 USB外设端协议驱动程序 307
21.2.4 USB外设端控制器驱动程序 316
21.2.5 再看“回调函数” 321
21.3 USB主机端协议栈 322
21.3.1 USB主机端协议栈结构 322
21.3.2 USB主机端协议栈实现 324
21.3.3 USB主机端驱动程序 327
第22章 USB设备——USB 2.0支持 334
22.1 设备端协议栈 334
22.2 主机端协议栈 341
22.2.1 USBD与驱动程序 342
22.2.2 与已有程序的兼容 345
第4部分 板级支持包流程与移植
第23章 多样化的主板——板级支持包BSP 349
23.1 引导过程 349
23.2 BSP的流程 350
23.2.1 BSP的作用和结构 350
23.2.2 BSP初始化硬件 354
23.3 BSP移植 355
23.3.1 实现BSP所需要的工作 355
23.3.2 BSP中的系统接口 355
第24章 珠联璧合——BSP与开发环境的结合 358
24.1 配置工具与BSP的关系 358
24.1.1 CDF文件分析 358
24.1.2 Tornado下通过cdf文件对VxWorks进行配置的过程 365
24.2 自制BSP配置 367
24.2.1 实例:增加自定义文件夹结构 367
24.2.2 创建组件的一般步骤 371
附录 新的VxWorks 373
FL.1 新开发环境 373
FL.1.1 新的界面 373
FL.1.2 新的开发工具 374
FL.1.3 开发环境的扩展 375
FL.1.4 与Tornado的对比 376
FL.2 新特性 377
FL.2.1 实时进程RTP 377
FL.2.2 错误检测与报告 378