第1篇VxWorks操作系统快速入门篇 2
第1章VxWorks嵌入式操作系统的特点与应用 2
1.1嵌入式系统概述 3
1.1.1嵌入式系统定义 3
1.1.2嵌入式系统组成和特点 3
1.1.3嵌入式系统发展趋势 4
1.1.4实时操作系统 5
1.2 VxWorks操作系统基本特点 7
1.2.1操作系统内核结构——微内核和宏内核 7
1.2.2 VxWorks内核——高性能的微内核设计 8
1.2.3 VxWorks开发支持——可裁减的运行软件 8
1.2.4 VxWorks网络支持——综合的网络工具 9
1.2.5 VxWorks移植性支持 9
1.2.6 VxWorks操作系统选件 10
1.3 VxWorks操作系统应用范围 10
1.4本章小结 11
第2章VxWorks操作系统的基本组件 12
2.1 VxWorks任务 13
2.1.1内核实现基本原理 13
2.1.2任务操作函数 15
2.1.3深入了解任务栈 19
2.1.4任务名长度问题 20
2.1.5正确结束任务 21
2.1.6任务的钩子函数——黑客机制 23
2.1.7任务小结 25
2.2 VxWorks任务调度算法——基于优先级的抢占式调度 26
2.3 VxWorks任务间通信策略 29
2.3.1信号量 30
2.3.2消息队列 31
2.3.3管道 32
2.3.4网络套接字Socket 32
2.3.5任务间通信的特殊机制:信号 33
2.4 VxWorks内存管理——虚拟地址空间支持 33
2.5 VxWorks中断处理——多层次的中断转移 38
2.5.1 VxWorks下中断转移过程详解(基于ARM平台) 40
2.5.2中断上下文中为何不可调用可引起睡眠的函数 43
2.6本章小结 45
第3章VxWorks操作系统启动过程详解 46
3.1 VxWorks操作系统启动 47
3.1.1 VxWorks基本启动方式 47
3.1.2 VxWorks操作系统内存布局 48
3.1.3下载型启动方式概述 50
3.1.4 ROM型启动方式概述 53
3.2深入理解bootrom——下载启动方式下的“瑞士军刀” 54
3.2.1 bootrom的构成 55
3.2.2 bootrom脚本的创建 56
3.2.3脚本运行过程分析 56
3.2.4 bootrom的重定位 60
3.2.5 RAM中运行的bootrom代码 62
3.2.6在bootrom中添加用户代码 68
3.2.7其他注意事项及说明 69
3.3深入VxWorks启动过程 71
3.3.1 ROM型映像早期启动流程详解 71
3.3.2下载型映像早期启动流程详解 81
3.3.3公共启动流程详解 82
3.4 VxWorks BSP文件组成 90
3.4.1源文件 91
3.4.2头文件 94
3.4.3 Makefile文件 97
3.4.4扩展文件 100
3.4.5说明文件 100
3.5本章小结 100
第2篇VxWorks设备驱动起步篇 102
第4章 设备驱动 102
4.1设备驱动的功能 103
4.2设备驱动的结构 103
4.3设备驱动的基本特点 105
4.3.1驱动代码执行环境——任务和中断上下文 105
4.3.2设备基本分类 105
4.3.3驱动代码安全性——参数合法性检查 106
4.3.4驱动基本工作模式——轮询和中断 106
4.3.5驱动与硬件数据的交互方式——DMA和直接复制 107
4.3.6其他注意事项——Volatile关键字 107
4.4本章小结 108
第5章VxWorks下设备驱动的内核结构层次 109
5.1认识VxWorks设备驱动内核基本层次 110
5.2 VxWorks内核驱动基本结构——内核三张表 114
5.2.1系统设备表 114
5.2.2系统驱动表 116
5.2.3系统文件描述符表 118
5.2.4内核三张表之间的联系 120
5.3 VxWorks内核驱动支持——“免费的午餐” 122
5.3.1管道虚拟设备驱动支持 123
5.3.2虚拟内存设备驱动支持 124
5.3.3 ramDisk设备驱动支持 127
5.3.4网络设备(netDrv)高层次驱动支持 129
5.4 VxWorks文件系统支持 132
5.4.1虚拟根文件系统VRFS 132
5.4.2事务型文件系统HRFS 132
5.4.3 MS-DOS兼容型文件系统dosFs 133
5.4.4原始文件系统rawFs 134
5.4.5 CD-ROM文件系统cdromFs 135
5.4.6只读文件系统ROMFS 135
5.4.7目标机文件系统TSFS 136
5.5添加驱动到V xWorks内核 136
5.6本章小结 138
第3篇VxWorks之六大核心设备驱动 140
第6章VxWorks设备驱动之字符设备驱动详解 140
6.1用户请求到字符设备驱动服务函数的传递 141
6.2实例入门:基于SPI接口的串口扩展芯片V K3224驱动实现 144
6.3认识VxWorks字符设备驱动基本数据结构——DEVHDR结构 145
6.4注册字符设备驱动和创建字符设备节点 147
6.5编写字符设备驱动底层服务函数 150
6.5.1编写字符设备打开函数 150
6.5.2编写字符设备读写函数 152
6.5.3编写字符设备控制函数 155
6.5.4编写字符设备关闭函数 157
6.5.5设备驱动工作模式的选择 160
6.5.6编写字符设备删除函数 161
6.6删除字符设备节点和卸载字符设备驱动 163
6.6.1删除字符设备节点 163
6.6.2卸载字符设备驱动 164
6.7本章小结 165
第7章VxWorks设备驱动之串口驱动详解 167
7.1认识VxWorks内核TTY中间层——串口驱动的基石 168
7.1.1TTY中间层应具备的功能 168
7.1.2基于TTY的串口驱动实现思想 169
7.1.3TTY中间层与底层串口驱动的关系 171
7.2 VxWorks内核TTY中间层初始化详解 171
7.2.1 ttyDrv函数 172
7.2.2 ttyDevCreate函数 173
7.2.3 sysSerialHwInit和sysSerialHwInit2函数 174
7.2.4 TTY中间层初始化过程小结及注意事项 174
7.3认识VxWorks下串口驱动基本数据结构——SIO-CHAN结构 176
7.3.1内核S1O-CHAN结构定义 176
7.3.2封装S1O-CHAN结构 178
7.4 VxWorks串口驱动文件基本构成 180
7.5 VxWorks串口驱动内核接口文件sysSerial.c的实现 183
7.6编写VxWorks串口驱动底层服务函数 190
7.6.1编写串口驱动初始化函数 191
7.6.2编写串口驱动回调函数——arm926UartCallback-Install 193
7.6.3编写串口驱动控制函数——arm926UartIoctl 195
7.6.4编写串口驱动中断处理函数——arm926UartInt 197
7.6.5编写串口驱动启动发送函数——arm926Uart-TxStartup 200
7.6.6编写串口驱动轮询工作模式支持函数 202
7.7再议VxWorks内核TTY中间层 205
7.8本章小结 208
第8章VxWorks设备驱动之块设备驱动详解 209
8.1认识VxWorks块设备驱动内核基本层次 210
8.2 VxWorks块设备驱动基石——内核文件系统支持 211
8.2.1 rawFs文件系统详解 211
8.2.2 dosFs文件系统详解 220
8.3认识V xWorks块设备驱动基本数据结构——BLK-DEV结构 228
8.3.1内核BLK-DEV结构定义 229
8.3.2封装BLK-DEV结构 232
8.4 VxWorks块设备驱动基本架构 233
8.4.1块设备驱动工作的特点 233
8.4.2基于CBIO中间层的块设备驱动内核层次 234
8.4.3块设备驱动底层函数组成 234
8.5编写VxWorks块设备驱动底层服务函数 235
8.5.1认识ATA(IDE)硬盘结构 236
8.5.2认识硬盘分区 237
8.5.3认识CBIO分区管理层 239
8.5.4编写块设备驱动初始化函数 241
8.5.5编写块设备驱动读设备函数ataBlkRd 244
8.5.6编写块设备驱动写设备函数ataBlkWrt 245
8.5.7编写块设备驱动设备控制函数ataIoctl 247
8.5.8编写块设备驱动设备状态查询函数ataStatus 248
8.5.9编写块设备驱动设备复位函数ataReset 248
8.6本章小结 249
第9章VxWorks设备驱动之Flash设备驱动详解 250
9.1认识Flash设备 251
9.1.1概述 251
9.1.2 Flash设备硬件接口的差别 252
9.1.3 Flash设备容量和成本 252
9.1.4 Flash设备可靠性和耐用性 252
9.1.5 Flash设备易用性 253
9.1.6 Flash设备软件支持 253
9.2深入Nand Flash设备 254
9.3深入Nor Flash设备 256
9.3.1 Nor Flash存储器特点 256
9.3.2 Nor Flash命令集BCS/SCS 256
9.3.3 Nor Flash接口访问标准 257
9.4认识Flash设备地址问题——驱动“陷阱” 258
9.5 VxWorks下Flash设备驱动内核层次详解——认识TrueFFS中间层 259
9.6 VxWorks内核TrueFFS中间层初始化详解 261
9.7创建和使用Flash设备 264
9.8认识VxWorks下Flash设备驱动基本架构 267
9.9编写VxWorks下Flash设备驱动Socket层服务函数 268
9.9.1 Socket驱动层文件构成 268
9.9.2 Socket驱动层实现示例 269
9.9.3 Socket层实现小结 279
9.10编写VxWorks下Flash设备驱动MTD层服务函数 285
9.10.1 tffsConfig.c文件——Flash设备驱动初始化入口 286
9.10.2 tffsMtd.c文件——Flash设备驱动MTD层服务函数所在地 289
9.11本章小结 297
第10章VxWorks设备驱动之网络设备驱动详解 299
10.1 VxWorks下网络设备驱动内核基本层次——认识MUX接口层 300
10.1.1网络设备驱动的基本特点 300
10.1.2网络设备驱动内核层次 301
10.1.3认识MUX中间层 302
10.2认识VxWorks网络设备驱动基本数据结构——END-OBJ结构 304
10.3实例介绍:基于TMS320D-M6446平台的EMAC网口驱动 305
10.4定义VxWorks网络设备驱动自定义结构——“信息集中地” 310
10.5 VxWorks网络设备驱动加载与启动 311
10.5.1网络设备驱动初始化基本流程 311
10.5.2修改configNet.h文件 313
10.5.3网络设备驱动加载函数armload的实现 314
10.5.4网络设备驱动启动函数armStart的实现 319
10.6 VxWorks网络设备驱动数据帧后台处理支持:netJobAdd 320
10.7编写 VxWorks网络设备驱动数据帧接收函数 323
10.7.1编写数据帧接收“下半部分”入口函数 323
10.7.2 VxWorks内核网络栈对数据帧的封装要求 324
10.7.3网络数据帧处理和上传 330
10.7.4再议网络数据帧的接收 332
10.8编写VxWorks网络设备驱动数据帧发送函数 333
10.9编写VxWorks网络设备控制函数 337
10.10编写VxWorks网络设备驱动查询模式支持函数 342
10.11编写VxWorks网络设备停止和卸载函数 345
10.12认识VxWorks网络设备驱动内核支持函数 347
10.13 VxWorks网络设备驱动实现小结 349
10.14认识网络设备IP地址和MAC地址 350
10.15 VxWorks网络设备驱动对多网口的支持 351
10.15.1修改底层驱动 352
10.15.2修改configNet.h文件 353
10.15.3修改usrNetInit函数 354
10.16本章小结 355
第11章VxWorks设备驱动之USB设备驱动详解 356
11.1USB详解 357
11.1.1USB的定义 357
11.1.2认识USB描述符及其相互关系 360
11.1.3 USB控制器基本分类 363
11.1.4认识USB硬件接口 363
11.2认识VxWorks下USB设备驱动内核层次和驱动对象 365
11.3示例介绍:UHCI USB主机控制器基本工作原理 367
11.3.1 UHCI规范 367
11.3.2 UHCI基本工作原理和数据结构 368
11.3.3 UHCI控制器驱动原理概述 371
11.4 VxWorks下USB设备操作请求内核传递过程详解 372
11.4.1第一层入口函数:usbBulkDevBlkRd 373
11.4.2第二层入口函数:usbBulkCmdExecute 376
11.4.3第三层入口函数:usbdTransfer 381
11.4.4第四层入口函数:urbExecBlock 383
11.4.5第五层入口函数:usbdCoreEnt 384
11.4.6第六层入口函数:fncTransfer 386
11.4.7第七层入口函数:usbHcdIrpSubmit 388
11.4.8第八层入口函数:底层HCD总入口函数 389
11.4.9VxWorks下USB设备操作请求内核传递过程总结 391
11.5 VxWorks下USB设备应用层类驱动初始化详解 392
11.6 VxWorks下USB控制器驱动初始化详解 397
11.7 VxWorks下USB控制器驱动架构 402
11.8编写VxWorks下USB控制器驱动底层服务函数 403
11.8.1编写USB操作请求总入口函数 403
11.8.2编写USB控制器驱动中断处理函数 404
11.8.3编写USB控制器驱动具体服务函数 408
11.9本章小结 408
参考文献 410