《Vxwork实时操作系统.pptx》由会员分享,可在线阅读,更多相关《Vxwork实时操作系统.pptx(109页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/3/141网络产品实现方法的演进实时系统VxWorks介绍Tornado开发环境介绍BSP设备驱动第1页/共109页2023/3/142实现方法的演进实现方法的演进基于PC 的架构 (80s-90s Early)软件实现基于ASIC+MPU的架构 (90s Middle)软件控制,硬件线速处理第2页/共109页2023/3/143基于基于PC的架构的架构CPU存储器网卡PCIMAC本地缓存网卡PCIPCI显卡EthernetEthernet 主主 板板OS(Linux)API应用程序应用程序硬件源代码(C)MAC终端BIOS问题:1、接口速率问题(upto100M);2、处理容量问题
2、;3、安全性问题;上层软件本地缓存第3页/共109页2023/3/144工作组工作组/园区路由器的基本结园区路由器的基本结构构-Cisco 7200 router CPUHost-BdramsrampcmciaPci-BLine cardLine cardLine cardLine cardLine cardLine cardEpromduartPci-B第4页/共109页2023/3/145路由器基本结构路由器基本结构交换开关线卡线卡线卡线卡协议软件网络接口分类整形过滤转发报文缓冲和 调度物理链路交换开关第5页/共109页2023/3/146基于基于ASIC+MPU的架构(的架构(1)输入处
3、理输出处理交换路由协议拥塞控制其它安全计费接纳控制控制控制平面平面数据数据平面平面路由查找路由器层次结构(硬件上层软件)路由器层次结构(硬件上层软件)第6页/共109页2023/3/147基于基于ASIC+MPU的架构(的架构(2)BSPMPU存储器ASICL2switch/L3ForwardingCPU总线MACEthernetRTOS(Vxworks)API应用程序应用程序硬件MACEthernet串口E口存储器Tornado开发环境,C源代码21问题:1、速率与功能受限于Chip;2、ASIC,速率低;FPGA,周期长;4、可扩展性差。第7页/共109页2023/3/148注:AAL层对
4、用户信息相当L4的下边界,对控制信息相当L2的下边界ATM层次模型层次模型第8页/共109页2023/3/149单板介绍单板介绍交换板SDRAMFLASH MPC860SAR 串口HDLC A P CCRAMBRAM以太网 A P CCRAMBRAMHDLC主备控制复位电路VCRAMPRAMVCRAMPRAM去主控板U2U2第9页/共109页2023/3/1410实时系统定义实时系统定义对于给定一个时间约束量 0 0,如果系统S S在T1T1时刻接受到输入,在T2T2时刻给出合理的输出,且使T2-T1T2-T1。则称系统S S满足要求的时间的实时性,通常称系统S S为实时系统。“正确、但迟后的
5、结果也是错误的”第10页/共109页2023/3/1411时间约束是相对的关键因素:系统对外部激励的响应时间 实时系统时间软件工程科学计算事物诊断测试信号处理物理测量进程仿真飞行器仿真遥测领领域域实时系统开发财务处理医疗测试分析工业自动化地震分析网络控制飞行仿真导弹仿真应应用用 1s100ms 10ms1ms100s50s10s1s第11页/共109页2023/3/1412计算机系统的组成计算机系统的组成应用软件H/WOperatingSystem抽象层间件中第12页/共109页2023/3/1413实时操作系统实时操作系统实时操作系统允许应用程序满足严格的时间要求多任务内核实时调度(基于优先
6、级的抢占)任务间通信互斥其它功能作为库由Kernel调度第13页/共109页2023/3/1414实时操作系统中的概念实时操作系统中的概念多任务调度优先权时间片通信和同步资源共享事件互斥信号量邮箱第14页/共109页2023/3/1415多任务多任务 目的:优化系统资源(CPU 时间、内存、磁盘、驱动器.)的使用多任务 OS允许多个任务并发和独立地在系统上运行实现独占和共享系统资源根据所需的输入/输出资源,控制任务执行任务(Task)、Process、Agent、Thread逻辑整体动态(进程)实体第15页/共109页2023/3/1416Task与与Program的区别的区别程序(progr
7、am)静态实体,由一个或多个指令序列,管理一组数据(内部或外部变量)任务(task)动态实体,运行一个或多个程序,以实现处理器上指定的活动第16页/共109页2023/3/1417任务的不同状态任务的不同状态运行挂起阻塞删除运行处理器处理器分配分配休眠休眠其它任务其它任务抢先抢先唤醒唤醒等待资源只等待处理器第17页/共109页2023/3/1418调调 度度调度器负责任务的状态管理和当前任务的选择分发器选择由调度器推举的当前的任务(有效的上下文切换)处理器分配算法的判据选择有:任务优先、其寿命、消耗的CPU时间、等等用调度器动态调整第18页/共109页2023/3/1419优先权优先权优先权优
8、先权系统错误处理硬件事件管理设备驱动器 最短用户任务 最长注释 唯一重要的优先权是任务 之间的相对优先权第19页/共109页2023/3/1420通信和同步通信和同步任务互操作,以便合作完成公共活动目的管理任务间共享的系统资源,避免系统死锁第20页/共109页2023/3/1421资源共享资源共享资源可以是软件或硬件局部(仅在一个任务内使用)或公用能共享的资源有最大的进入能力第21页/共109页2023/3/1422互互 斥斥避免数据或者代码不一致的机制互斥当几个任务共享非重入资源(判据)时发生互斥信号量信号量类同于售票机第22页/共109页2023/3/1423邮邮 箱箱邮箱是任务之间的交换
9、区2个队列与邮箱有关一个是消息队列一个是任务队列(多个发送和接受)msg1msg2msg3sendreceive第23页/共109页2023/3/1424VxworksVxworks操作系统是一个操作系统是一个嵌入式实时操作系统(嵌入式实时操作系统(RTOSRTOS)。VxworksVxworks与其它实时与其它实时OSOS一样,基于以下两个重要机制:一样,基于以下两个重要机制:*多任务环境及任务间通信多任务环境及任务间通信 *硬件中断处理硬件中断处理VxworksVxworks多任务内核完成的功能是:多任务内核完成的功能是:实时调度,任务间通信及互斥实时调度,任务间通信及互斥。其它功能则作为
10、系统库围绕在内核周围,它们可根据需要进行剪裁。其它功能则作为系统库围绕在内核周围,它们可根据需要进行剪裁。VxworksVxworks与非实时系统的不同之处在于:与非实时系统的不同之处在于:VxworksVxworks的优先抢占机制基于调度,的优先抢占机制基于调度,VxworksVxworks对外部事件的反应和处理快,对外部事件的反应和处理快,VxworksVxworks容量小并且可配置(微内核结构)容量小并且可配置(微内核结构)VxWorks第24页/共109页2023/3/1425VxWorks组组件件高性能实时内核POSIX(1003.1b)兼容接口I/O系统本地文件系统C/C+开发支持
11、共享内存虚拟内存目标机驻留工具第25页/共109页2023/3/1426VxWorks组件(续)组件(续)工具库性能评估工具目标机代理板支持包(BSP)VxWorks仿真器和逻辑分析仪(WindView)网络组件第26页/共109页2023/3/1427内核内核(Kernel)VxWorks的内核叫Wind包括多任务抢占和优先权调度任务间同步和通信中断处理WatchDog定时器内存管理多任务内核、任务机制、任务间通信和中断处理机制是VxWorks运行环境的核心。其中,多任务和任务间通信是现代实时操作系统的基石。第27页/共109页2023/3/1428内核内核多任务多任务任务控制块(TCB)任
12、务状态转换任务调度任务控制任务扩展POSIX任务调度接口(略)任务错误状态:errno任务异常处理(Exception Handle)共享代码和重入(Shared code and reentrancy)系统任务(System Task)第28页/共109页2023/3/1429内核内核任务控制块任务控制块(TCB)保存任务的上下文,一个任务的上下文包括:程序执行指针CPU寄存器和浮点寄存器动态变量和函数调用的堆栈标准输入、输出和错误的I/O分配延迟定时器时间片定时器内核控制结构信号处理器调试和性能监视值第29页/共109页2023/3/1430内核内核任务状态转换任务状态转换一切就绪,只差C
13、PU等待某种资源处于睡眠状态,延迟一段时间被中断,用于调试第30页/共109页2023/3/1431任务状态队列任务状态队列KernelTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBCPU挂起队列阻塞队列睡眠队列就绪队列执行内核负责维护系统中所有任务的当前状态。一个任务的状态转变是应用调用内核调用的结果。第31页/共109页2023/3/1432内核内核 Wind 任务调度任务调度优先级抢占调度(缺省)优先级高的Task抢占CPU0255,256个优先级,0级最高,255级最低轮询调度优先级相同时,多个Task轮流占用CPU抢占锁定独占CPU,其它高
14、优先级的Task不能抢占CPU第32页/共109页2023/3/1433内核内核 Wind Task调度调度基于优先级的抢占调度基于优先级的抢占调度与轮转调度算法结合第33页/共109页2023/3/1434内核内核 任务控制函任务控制函数数taskSpawn():创建并激活一个task(定位)taskInit():初始化一个新tasktaskActivate():激活一个taskTask ID:32bits,指向task控制块的指针(ID 0指调用task)Task Name:代表task的ASCII字符串Task选项获取Task信息Task删除和删除保险Task控制:改变task的状态低级
15、操作参数:所有从目标机启动的任务以字母所有从目标机启动的任务以字母 t开头,所有从主机启动的任务以字母开头,所有从主机启动的任务以字母 u开头开头第34页/共109页2023/3/1435内核内核 任务扩展函数任务扩展函数为扩展与task相关的功能,Wind提供勾连(hook)功能,在task创建、切换、删除时,自动唤起相关的勾连例程。在TCB中有一个字段存放此扩展taskCreateHookAdd()每个task创建时增加一个例程taskCreateHookDelete()taskSwitchHookAdd()taskSwitchHookDelete()taskDeleteHookAdd()
16、taskDeleteHookDelete()第35页/共109页2023/3/1436内核内核 任务错误状态:任务错误状态:errnoErrno是一个预定义的全局变量多任务情况下,每个任务有自己的errno,作为task上下文的一部分,中断服务程序(ISR)也有自己的errno惯例:程序返回OK(0)表示成功,ERROR(-1)表示失败;若返回指针,则NULL(0)表示失败。返回ERROR或NULL时,通常设置errno表示具体错误代码Errno总表示最近的错误状态,不会被清除如果errno在错误状态符号表(statSymTbl)中有对应字符串,则可以使用printErrno()显示错误内容(
17、不能用在ISR中)尽量使用logMsg()来显示错误信息,因为它在task和ISR下都能工作第36页/共109页2023/3/1437内核内核 Errno分分配配Errno编码中使用前两个字节表示产生错误的模块,后两个字节表示每个错误号VxWorks系统的模块号为1-500,0用于源代码兼容应用程序的模块号为大于500的正数和所有负数errno4bytes模块号错误状态号第37页/共109页2023/3/1438内核内核用户自定义用户自定义errno在用户头文件目录下创建xxModNum.h,定义自己的模块:#define M_lemLib(512 symbol table component
18、s error status table.重新编译VxWorks如果要将错误代码加入WindShell,需要将新模块的错误字符串加入文件host/resource/tcl/errnoTbl.tcl或者$(HOME)/.wind/windsh.tcl中set M_lemLib expr 512 16set errnoTbl expr$M_lemLib|1 S_lemLib_LEM_INIT_FAILset errnoTbl expr$M_lemLib|2 S_lemLib_LEM_CLOSE_FAILset errnoTbl expr$M_lemLib|3 S_lemLib_MSG_TYPE_E
19、RROR第39页/共109页2023/3/1440内核内核 任务异常处理任务异常处理VxWorks的异常处理包负责所有异常处理缺省的异常处理是挂起此task,并保存异常点的task状态,其它task继续运行Tornado的开发工具可以查看挂起task的状态也可以通过信号(signal)将某硬件或软件的异常处理与自己的处理程序关联第40页/共109页2023/3/1441内核内核共享代码和重入共享代码和重入被多个task调用的代码叫共享代码,共享代码必须可重入若代码要修改全局/静态变量,则不可重入,否则会引起数据混乱多数例程可重入,但如果例程foo()还有一个对应的foo_r()例程,则foo(
20、)是不可重入的VxWorks使用以下可重入技术:动态堆栈变量全局变量和静态变量由信号量守护任务变量Taskone(void)MyFune();Tasktwo(void)MyFune();MyFune(void)任务代码共享第41页/共109页2023/3/1442内核内核 VxWorks系统任系统任务务Root Task,tUsrRoot是内核执行的第一个task,它创建其它task,完成任务后被停止并删除日志Task,tLogTask记录系统日志消息,而不必执行I/O异常Task,tExcTask支持VxWorks的异常处理网络Task,tNetTask处理网络的任务级别的功能目标机代理Ta
21、sk,tWdbTask处理debug请求Task可选组件tShell、tRlogind、tTelnetd、tPortmapd第42页/共109页2023/3/1443任务间通信任务间通信Vxworks提供了一套丰富的任务间通信机制,包括:共享数据结构/内存共享(Shared memory):简单的数据共享方法信号量(Semaphore):用于基本的互斥及同步消息队列(Message Queue)和管道(Pipes):用于同一CPU上任务间消息的传递套接口(Socket)和远程程序调用(RPC):用于网络上任务间的通信信号(Signals):用于异常处理第43页/共109页2023/3/1444
22、任务间通信任务间通信共享数据结共享数据结构构共享数据结构VxWorks中所有task存在于一个线性的地址空间中,所以task之间共享数据结构很容易这些数据结构可以是全局变量线形缓冲区环形缓冲区链表指针第44页/共109页2023/3/1445任务间通信任务间通信共享内共享内存存Vxworks提供了三种共享内存的对象(shared-memory objects)来实现在不同任务之间和不同CPU的任务间的高速同步和通信。共享信号量(shared semaphoresshared semaphores):有二进制,记数型两种,用于在不同CPU上的任务间的同步,和对共享数据结构的互斥访问共享消息队列(
23、shared message queuesshared message queues):允许多个处理器上的任务交换消息共享内存分区(shared-memory partitionsshared-memory partitions):有系统类型和用户类型可以用于为不同处理器上的任务分配公共数据空间第45页/共109页2023/3/1446任务间通信任务间通信互互斥斥为避免内存访问竞争,需要内存访问互锁有许多方法可以实现资源的访问互斥:禁止中断、禁止抢占、信号量禁止中断(最强大,时间要尽量短)int lock=intLock();.critical region that cannot be in
24、terrupted.intUnlock(lock);禁止抢占(可以被中断)taskLock();.critical region that cannot be interrupted.taskUnlock();第46页/共109页2023/3/1447任务间通信任务间通信信号信号量量信号量(Semaphore)是解决互斥和任务同步的最主要手段信号量提供比中断禁止和抢占禁止更精细的互斥信号量协调任务的执行和外部事件,以实现任务同步Wind将信号量优化为三类,以解决不同类型的问题:二进制:最快,最通用的信号量,用于同步和互斥互斥:专门解决互斥问题而优化的二进制信号量:优先权继承、删除保护和递归计数
25、:类似二进制,但记录信号量发放的次数,为守护资源的多个实例而优化POSIX信号量(略)第47页/共109页2023/3/1448任务间通信任务间通信消息队消息队列列任何task或者ISR都可以向消息队列中放入消息,多个task可以向同一个消息队列中发送消息或者从其中接收消息两个task之间的双向通信,通常需要两个消息队列,每个方向一个消息队列中的消息个数和每个消息的长度都是可变的VxWorks支持两种消息队列库:Wind QueuePOSIX Queue超时优先级第48页/共109页2023/3/1449任务间通信任务间通信管道管道(Pipes)管道是虚拟的I/O设备Task使用标准的I/O例
26、程操作管道Open,read,write,ioctl管道支持select函数第49页/共109页2023/3/1450任务间通信任务间通信 Task网络通网络通信信Sockets支持TCP/UDP与BSD 4.4 UNIX兼容远端过程调用(RPC)RPC允许一个机器上的进程调用同一个机器或者别的机器上运行的过程RPC内部使用socket作为底层通信手段第50页/共109页2023/3/1451任务间通信任务间通信信号信号(Signal)信号可以异步地改变task的执行流程任何task或ISR都可以向某个task发送一个信号收到信号的task立即挂起,下次被调度时运行信号处理例程信号处理例程使用
27、接收task的上下文和堆栈信号处理例程应当作ISR来对待即使接收task被阻塞,依然能够唤醒信号处理例程信号更适用于错误或异常处理,而不是一般的Task通信Wind支持两种信号接口:UNIX BSD风格、POSIX兼容第51页/共109页2023/3/1452POSIX兼兼容容POSIX:the Portable Operation System InterfaceISO/IEEE制定的一组接口,以支持应用程序在不同操作系统上的源代码的移植,使用这些接口有助于将软件从一个操作系统移植到另一个操作系统。实时操作系统对应的POSIX接口标准为1003.1b(原来的1003.4),VxWorks几乎
28、都支持,重要包括:异步I/O信号量消息队列内存管理排队信号调度时钟和定时器第52页/共109页2023/3/1453POSIX接口接口VxWorks Wind内核包括:POSIX接口和专为VxWorks设计的接口,对应两种不同调度。POSIX调度基于进程(不可直接访问内存,父子关系)基于FIFO,优先数越高,优先级越高Wind调度基于任务(可直接访问内存)基于优先级的抢占式调度,优先数越低,优先级越高POSIX时钟和定时器,支持多个虚拟时钟POSIX内存上锁接口,支持分页和交换技术第53页/共109页2023/3/1454中断服务代码中断服务代码(ISR)为尽快响应中断请求,中断服务例程在ta
29、sk上下文以外的特别的上下文中运行,因而唤醒ISR,不需要切换任务上下文使用intConnect(),可以将C函数与任何中断连接起来有些结构支持独立的中断堆栈,有些不支持,由BSP决定ISR的特别限制(没有TCB):ISR不能调用可能使自己被阻塞的例程ISR不能分配和释放内存,或调用包含分配和释放内存的函数ISR不能通过I/O访问设备,因为可能阻塞ISR使用logMsg()来向控制台(console)打印消息ISR不能使用浮点协处理器ISR可以使用所有VxWorks的工具库,支持errno第54页/共109页2023/3/1455中断服务代中断服务代码码ISR出现异常时无法挂起,VxWorks
30、将异常描述存放到低端内存,然后重新启动系统;VxWorks boot ROM测试低端内存,并将异常描述打印到控制台上可以为某些事件预留最高级别的中断,实现0时延响应ISR到Task的通信共享内存和环形缓冲区信号量(ISR只能释放信号量)消息队列(使用NO_WAIT参数)管道(只能write)信号(ISR用信号通知Task)第55页/共109页2023/3/1456WatchDog定时定时器器VxWorks提供Watchdog Timer机制,允许任何C函数与一个特定的时间延迟相联系。通常,作为系统中断服务程序的一部分来维护。利用Watchdog来处理任务时限vwdCreate()分配并初始化一
31、个watchdog定时器vwdDelete()终止并删除一个watchdog定时器vwdStart()启动一个watchdog定时器vwdCancel()取消一个正在计时的watchdog第56页/共109页2023/3/1457内内 容容网络产品实现方法的演进实时系统VxWorks介绍基本定义内核(Wind)任务间通信POSIX、ISR、WatchdogI/O系统及其他Tornado开发环境介绍BSP设备驱动第57页/共109页2023/3/1458VxWorks的的I/O系统系统VxWorks的I/O系统为各种设备提供简单的、统一的、与设备无关的接口,包括:面向字符的设备,如终端随机访问块
32、设备,如磁盘虚拟设备,如task间的管道和socket监视和控制设备,如数字/模拟I/O设备访问远端设备的网络设备VxWorks为基本I/O和有缓冲区I/O提供标准C库基本I/O库与UNIX兼容;有缓冲区I/O库与ANSI C兼容VxWorks的I/O系统设计使之比大多数I/O系统更快更灵活,这对实时系统很重要第58页/共109页2023/3/1459VxWorks的的I/O系统系统第59页/共109页2023/3/1460文件、设备及驱动文件、设备及驱动在VxWorks中,应用程序通过打开文件来访问I/O设备文件指下面两种事物之一:未结构化的“原始”设备,如串行通信通道或者任务间管道位于一个
33、结构化的、随机访问的、包含文件系统的设备上的逻辑文件I/O设备有两个级别:基本I/O和有缓冲区I/O文件名和缺省设备:/usrNFS网络设备Host:Non-NFS网络设备Dev:dosFs文件系统设备第60页/共109页2023/3/1461基本基本I/O基本I/O在VxWorks中是最低级的I/O,其接口与标准C库的I/O原语兼容creat()创建一个文件remove()删除一个文件open()打开一个文件(也可创建一个文件)close()关闭一个文件read()读一个已经创建或打开的文件write()写一个已经创建或打开的文件ftruncate()将一个文件切割成指定大小ioctl()对
34、文件或设备执行特定控制功能在基本I/O级别,文件用文件描述字(fd)指示,它是一个整数,在creat()或open()时返回Fd不用后应及时关闭,以节约资源第61页/共109页2023/3/1462标准输入、标准输出和标准错标准输入、标准输出和标准错误误下面的文件描述字(fd)保留作特殊用途:0=标准输入 1=标准输出2=标准错误输出它们不会由create()返回,但可以重定向到其它fd系统缺省情况下将标准fd重定向到控制台,任务缺省情况下使用全局重定向的定义它们可以被全局重定向:ioGlobalStdSet(stdFd,fileFd);每个任务的重定向将覆盖全局定义ioTaskStdSet(
35、0,stdFd,fileFd);第62页/共109页2023/3/1463ioctl()为了运行某些不适合于其它基本I/O的I/O函数,使用ioctl()设置或查询一些属性,譬如:当前设备可输入多少字节设置设备的特定选项获取某个文件系统的信息。Ioctl()的参数是fd、指示请求函数的代码、和一个函数需要的参数:result=ioctl(fd,function,arg);将一个tty设备的数据波特率设为9600的例子:status=ioctl(fd,FIOBAUDRATE,9600);第63页/共109页2023/3/1464等待在多个等待在多个fd上的上的select()将任务挂起于多个文件
36、描述字或者超时后返回与Unix和Windows兼容selectLib提供两种支持任务级别支持:任务等待多个设备激活设备驱动支持:等待设备I/O的同时检测挂起的任务第64页/共109页2023/3/1465有缓存的有缓存的I/O:Stdio低级I/O调用会带来一些开销,为提高I/O访问的灵活性和效率VxWorks提供了有缓存的I/O机制Stdio的I/O函数提供透明的缓存机制,提高访问效率FILE*fp;fp=fopen(/usr/foo,r);标准输入、输出、和出错StdinStdoutStderr第65页/共109页2023/3/1466其它格式化其它格式化I/O特殊情况:printf(),
37、sprintf(),and sscanf()属于fioLib,没有缓存附加函数:printErr()and fdprintf()消息日志提供日志功能避免当前任务访问I/O可以重定向到其它I/O第66页/共109页2023/3/1467异步输入输出异步输入输出异步输入输出(AIO):让一般内部处理和I/O操作同步进行提高任务的效率AIO的例程(见参考手册)AIO控制块AIO的使用第67页/共109页2023/3/1468本地文件系统本地文件系统VxWorks包括多种使用块设备(磁盘)的本地文件系统VxWorks的I/O结构使VxWorks可以同时有多种文件系统:MS-DOS兼容文件系统:dosF
38、s功能强大RT-11兼容文件系统:rt11Fs无分层文件组织结构,文件连续原始磁盘文件系统:rawFs整个磁盘作为一个文件SCSI序列文件系统:tapeFs磁带的一卷作为一个文件CD-ROM文件系统:cdromFsISO 9660第68页/共109页2023/3/1469虚拟内存虚拟内存虚拟内存支持有内存管理单元(MMU)的目标板第69页/共109页2023/3/1470Tornado(1)Tornado提供了Vxworks系统开发的集成开发环境,其中Tornado源代码编辑器包括下列特性:标准文本控制能力C和C+语法元素用不同颜色调制集成:编辑窗口跟踪代码的执行 编译集成:项目管理将编译警告
39、和编译错误 直接和编辑窗口中的相应代码对应起来。第70页/共109页2023/3/1471Tornado(2)Tornado集成开发环境由以下几个部分组成:第71页/共109页2023/3/1472Vxworks/Tornado开发方式开发方式目标CPU:Vxworks 在其上运行 的一个单板计算机;Tornado PC主机:有一根串行线与目标机相连(初始化时主机作为终 端用),Vxworks核二进制文件驻留在其盘上,核 的下载及运行Tornado 工具通过以太网口进行。EthernetAGENTSERVER第72页/共109页2023/3/1473C+开发支持开发支持Tornado自带GNU
40、 C+编译器Tornado包括最新版本的iostream库和标准模板库的SGI实现Tornado的交互开发工具如Debugger、Shell等都支持C+Tornado还提供Wind Foundation Classes:VxWorks Wrapper Class library Tools.h+library from Rogue Wave 第73页/共109页2023/3/1474目标机驻留工具目标机驻留工具除了驻留在主机中的工具外,部分工具驻留在目标机中:Target-resident shellSymbal tableModule loader/unloader第74页/共109页202
41、3/3/1475工具库工具库中断处理支持:支持硬件中断和软件中断WatchDog定时器消息日志:记录出错或状态消息内存分配:可管理多个独立的内存池字符串格式化和扫描:printf(),scanf()等线形和环形缓冲区处理:可同时访问FIFO而不用互锁链表操作:lstLib包含创建和处理双向链表的全集ASNI C库第75页/共109页2023/3/1476性能评估性能评估执行计时器(Execution Timer):测量程序运行时间Spy工具:提供每个task使用CPU的信息占用CPU的时间中断占用的时间空闲时间WindView提供更强大的监视功能第76页/共109页2023/3/1477VxW
42、orks仿真器仿真器(VxSim)VxWorks仿真器是一个模仿VxWorks目标机的程序,作为原型和测试环境可以在一个主机上运行多个仿真器不涉及到硬件驱动第77页/共109页2023/3/1478Tornado开发环境开发环境第78页/共109页2023/3/1479Tonado开发环境(续)开发环境(续)第79页/共109页2023/3/1480Tornado开发环境开发环境(续)(续)第80页/共109页2023/3/1481VxWorks操作系统组成SCSIControllerSerialControllerClockTimerEthernetControllerHardwareSCS
43、IDriverBSPNetworkDriverHardware-Dependent SoftwareI/OSystemsWindKernelVxWorksLibrariesTCP/IPHardware-Independent SoftwareFilesystemTool-Applications抽象层固件第81页/共109页2023/3/1482板支持包(板支持包(BSP)为各种目标板的硬件功能提供了统一的软件接口它们包括:硬件初始化中断处理和产生硬件时钟和定时器管理内存映射和分配BSP还包括boot Rom和其它启动机制sysLib和sysALib库是VxWorks可移植的核心第82页/共1
44、09页2023/3/1483 Vxworks操作系统将一切与硬件有关操作系统将一切与硬件有关的功能模块都放在的功能模块都放在BSP库中。该库中。该BSP库是硬库是硬件与软件的接口,处理硬件的初始化、中件与软件的接口,处理硬件的初始化、中断处理与产生、硬件时钟与定时管理、局断处理与产生、硬件时钟与定时管理、局部和总线内存空间的映射、内存大小定义,部和总线内存空间的映射、内存大小定义,等等等等。能够自行启动目标机、初始化目标。能够自行启动目标机、初始化目标机、能够与机、能够与host通信以下载通信以下载Vxworks核、把核、把控制权交给控制权交给Vxworks核来调用用户应用程核来调用用户应用程
45、序等功能。序等功能。板支持包(板支持包(BSP)第83页/共109页2023/3/1484VxWorks中的设备中的设备ttyDrv Terminal driver ptyDrv Pseudo-terminal driverpipeDrv Pipe drivermemDrv Pseudo memory device drivernfsDrv NFS client drivernetDrv Network driver for remote file accessramDrv RAM driver for creating a RAM diskscsiLib SCSI interface lib
46、rary-Other hardware-specific drivers第84页/共109页2023/3/1485VxWorks与主机系统的与主机系统的I/O差别差别设备配置:在VxWorks中设备驱动可以动态安装和卸载文件描述字:在Windows和Unix中,fd是进程中唯一的;在VxWorks中fd是全局唯一的,标准输入输出例外(0,1,2)I/O控制:Unix和VxWorks中传给ioctl()的参数可能不同驱动例程:Unix下设备驱动运行于系统模式下,不可抢占;VxWorks下的设备驱动运行于线程模式下,可抢占。第85页/共109页2023/3/1486内部结构内部结构多数系统的设备驱
47、动只提供少数低级I/O例程,如输入、输出等;大部分工作由I/O系统完成。驱动易实现设备动作尽可能类似驱动编写人员很难完成I/O系统未提供的协议VxWorks中I/O系统用于将用户请求交给适当的设备驱动,每个驱动根据自己的情况处理用户的I/O请求。VxWorks提供高级例程库用于设备驱动的编写为标准设备写驱动很容易,编码量小可以根据情况用非标准方式实现用户请求第86页/共109页2023/3/1487设备驱动程设备驱动程序序驱动初始化例程xxDrv()安装驱动、分配数据结构、连接中断服务例程、初始化硬件设备创建xxDevCreate()给驱动增加一个设备,参数包括缓冲区大小、设备地址等为设备初始
48、化数据结构、信号量和硬件等基本I/O功能xxOpen()xxRead()xxWrite()xxIoctl()中断服务例程xxInterrupt()第87页/共109页2023/3/1488驱动安装驱动安装I/O系统维护一个驱动表,将用户的I/O请求转换为适当的驱动程序使用iosDrvInstall()动态安装驱动,参数为新驱动的7个I/O例程的地址,iosDrvInstall()将地址放入驱动表的空闲条目,返回此条目的索引,称为驱动号。文件系统在驱动表中有自己的条目,它们在文件系统库初始化时创建。第88页/共109页2023/3/1489驱动安装举驱动安装举例例第89页/共109页2023/3
49、/1490设设 备备一些驱动可以为某种设备的多个实例服务在VxWorks中,数据结构设备头(DEV_HDR)定义设备设备名设备的驱动的编号(Index)DEV_HDR保存在驻留内存的设备列表(device_list)中DEV_HDR是设备描述字(device descriptor)的开始部分,后者包括特定设备的数据:设备地址缓冲区信号量设备描述字只要以DEV_HDR开头便可,可包含任何与设备相关的信息第90页/共109页2023/3/1491设备列表和增加设设备列表和增加设备备调用iosDevAdd()动态增加非块设备,参数为新设备的描述字的地址、设备名和驱动编号驱动程序只需要填写描述字中与设
50、备相关信息,不需要填写设备头;iosDevAdd()在设备头中填入设备名称和驱动编号,然后加入设备列表增加块设备需要调用与此块设备文件系统相关的设备初始化例程,这个例程将自动调用iosDevAdd()第91页/共109页2023/3/1492增加设备的例子增加设备的例子第92页/共109页2023/3/1493文件描述文件描述字字可以同时对一个设备打开多个fd一个设备的驱动维护I/O系统设备信息和与fd相关的信息(如文件偏移量)也可以对一个非块设备打开多个fd,如tty,这些fd没有附加信息,所以对它们的写操作效果相同第93页/共109页2023/3/1494Fd表表文件用open()或cre