为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Vxworks基础

2020-04-05 1页 ppt 1MB 3阅读

用户头像 个人认证

一线信息技术教师,具有丰富教学经验和管理经验,多次被评为地级优秀教师

举报
Vxworks基础BCNGVxworks简介 最成功的实时操作系统 1981,Windriver,嵌入式咨询公司 TCP/IP,NFS工具集 WIND内核 1995,tornado集成开发环境 收购SDS、DIAB、pSOSBCNGVxworks操作系统是一个嵌入式实时操作系统(RTOS)。Vxworks与其它实时OS一样,基于以下两个重要机制:*多任务环境及任务间通信*硬件中断处理Vxworks多任务内核完成的功能是:实时调度,任务间通信及互斥。其它功能则作为系统库围绕在内核周围,它们可根据需要进行剪裁。Vxworks与非实时系统的不同之处在...
Vxworks基础
BCNGVxworks简介 最成功的实时操作系统 1981,Windriver,嵌入式咨询公司 TCP/IP,NFS工具集 WIND内核 1995,tornado集成开发环境 收购SDS、DIAB、pSOSBCNGVxworks操作系统是一个嵌入式实时操作系统(RTOS)。Vxworks与其它实时OS一样,基于以下两个重要机制:*多任务环境及任务间通信*硬件中断处理Vxworks多任务内核完成的功能是:实时调度,任务间通信及互斥。其它功能则作为系统库围绕在内核周围,它们可根据需要进行剪裁。Vxworks与非实时系统的不同之处在于:Vxworks的优先抢占机制基于调度,Vxworks对外部事件的反应和处理快,Vxworks容量小并且可配置(微内核结构)VxWorks(1)BCNGVxworks提供了一套丰富的任务间通信机制,包括:●内存共享(Sharedmemory):简单的数据共享方法●信号量(Semaphore):用于基本的互斥及同步●消息队列(Messagequeues)和管道(pipe):用于同一CPU上任务间消息的传递●套接口(Socket)和远程程序调用(RPC):用于网络上任务间的通信●信号(Signal):用于异常处理此外,Vxworks提供了三种共享内存的对象(shared-memoryobjects)来实现运行在不同CPU上的任务间的高速同步和通信。●共享信号量(sharedsemaphores):有二进制,记数型两种●共享消息队列(sharedmessagequeues)●共享内存分区(shared-memorypartitions):有系统类型和用户类型VxWorks(2)BCNGTornado(1)Tornado提供了Vxworks系统开发的集成开发环境,其中Tornado源代码编辑器包括下列特性: ●标准文本控制能力 ●C和C++语法元素用不同颜色 ●调制集成:编辑窗口跟踪代码的执行 ●编译集成:项目管理将编译警告和编译错误 直接和编辑窗口中的相应代码对应起来。BCNGTornado(2) Tornado集成开发环境由以下几个部分组成:BCNG目标CPU:Vxworks在其上运行的一个单板计算机TornadoPC主机:有一根串行线与目标机相连(初始化时主机作为终端用)Vxworks核二进制文件驻留在其盘上,核的下载及运行Tornado工具通过以太网口进行EthernetAGENTSERVERBCNGVxworks/Tornado开发方式目标CPU:Vxworks在其上运行的一个单板计算机;TornadoPC主机:有一根串行线与目标机相连(初始化时主机作为终端用),Vxworks核二进制文件驻留在其盘上,核的下载及运行Tornado工具通过以太网口进行。EthernetAGENTSERVERBCNGTornado开发环境BCNGTonado开发环境(续)BCNGTornado开发环境(续)BCNGVxworks操作系统将一切与硬件有关的功能模块都放在BSP库中。该BSP库是硬件与软件的接口,处理硬件的初始化、中断处理与产生、硬件时钟与定时管理、局部和总线内存空间的映射、内存大小定义,等等。能够自行启动目标机、初始化目标机、能够与host通信以下载Vxworks核、把控制权交给Vxworks核来调用用户应用程序等功能。板支持包(BSP)BCNGBCNGTornado&VxWorks框架BCNGVxworks应用广泛的嵌入式实时操作系统BCNGVxWorks的整体构架MicroKerneldesignforscalabilityandportabilityRichkernelfeaturesetPre-emptive,prioritybasedandroundrobinschedulingBinary,countingandmutualexclusionsemaphoreswithpriorityinheritanceMessagequeues,sharedmemoryPOSIXpipes,countingsemaphores,messagequeuesandsignals*BCNGVxworks特点 WIND微内核 硬件支持广(BSP) 较好的兼容性,POSIX1003.1.b 良好的可裁减性 很好的开发环境:tornado 动态连接和下载 多处理器、网络协议,图形界面支持BCNGVxWorks的特点 微内核MicroKernelSize<10K;功能模块化;高可靠设计;快速多任务切换、响应时间短中断延时小,满足实时要求;BCNGVxWorks的特点 对硬件不做假设。硬件设计电路可完全自定义;支持各种或自定义的外设;支持的CPU构架包括:Intelx86i960StrongARMMotorola68KCPU32ColdfireMcorePowerPCARM7,8,StrongARMMIPSR3K,R4K,R5KHitachiSH1,SH2,SH3NECV83x,V85xSPARC,UltraSPARCSeimensSAHitachiSHMitsubishiM32RDBCNG板支持包(BSP) 为各种目标板的硬件功能提供了统一的软件接口 它们包括: 硬件初始化 中断处理和产生 硬件时钟和定时器管理 内存映射和分配 BSP还包括bootRom和其它启动机制 sysLib和sysALib库是VxWorks可移植的核心BCNGVxworks操作系统将一切与硬件有关的功能模块都放在BSP库中。该BSP库是硬件与软件的接口,处理硬件的初始化、中断处理与产生、硬件时钟与定时管理、局部和总线内存空间的映射、内存大小定义,等等。能够自行启动目标机、初始化目标机、能够与host通信以下载Vxworks核、把控制权交给Vxworks核来调用用户应用程序等功能。板支持包(BSP)BCNGVxWorks的特点--高度伸缩性的环境Stand-alonekerneluptofullfeaturedOS0100200300400500MaximumEquippedFileSystemNetworkingO.S.mMemoryRequirements(Kbytes)microkernel5kbStandAloneO.S.20kbNetworkedO.S.80-100kbNetworkedO.S.&FileSystem250kbMaximumEquipped500kbkernelO.S.BCNGVxMP多处理器支持 允许将任务分布在多个CPU上执行 在不同CPU上运行的任务可以通过现有的通信机制,如信号灯、消息队列等进行同步和数据交换它允许将任务分布在多个CPU上执行以提高效率。它透明的、高性能的设计使得在不同CPU上运行的任务可以通过现有的通信机制,如信号灯、消息队列等进行同步和数据交换。Leveragessharedmemoryforgloballysharedobjects(全局目标可共享内存)Semaphores,messagequeues,memorypools(信号灯,消息队列,内存池)Supportsupto20CPUsUserconfigurablesharedmemorypoolsize(用户自定义共享内存池的大小)*BCNG文件系统 VxWorks包括多种使用块设备的本地文件系统 VxWorks的I/O结构使VxWorks可以同时有多种文件系统: MS-DOS兼容文件系统:dosFs RT-11兼容文件系统:rt11Fs 无分层文件组织结构,文件连续 原始磁盘文件系统:rawFs 整个磁盘作为一个文件 网络文件系统:NFS flash文件系统:TrueffBCNG综合网络支持SENSEnhancedNetworkingStackBSD4.4compatiblesocketlibraryAddscontemporaryInternetfeaturesCIOR,DHCP,DNS,SNTP,IPmulticastingOptional,integratedOSPFroutingsupportIntegratedMIB-IIsupportOptionalSNMPv1,v2csupportSTREAMSframeworksupport15-20%performanceimprovement*BCNGGraphics构架TrufflePersonalJWorksäJavaHTMLC++Tornado开放式、可扩展的集成开发环境BCNGBCNG关键词 Host:ie.Solaris,SunOS,Windows95/NT Target:ie.PowerPC,68k,x86,MIPS,ARM.. TargetServer:Host-basedcontrolprocess DebugAgent:Target-basedcontrolprocess Backend:Ethernet,RawSerial,CustomBCNG开发机和目标机的连接BCNGTornado系统结构Tornado是嵌入式实时领域里最新一代的开发调试环境。Tornado给嵌入式系统开发人员提供了一个不受目标机资源限制的超级开发和调试环境。Tornado包含三个高度集成的部分:运行在宿主机和目标机上的强有力的交叉开发工具和实用程序;运行在目标机上的高性能、可裁剪的实时操作系统VxWorks;连接宿主机和目标机的多种通讯方式,如:以太网,串口线,ICE或ROM仿真器等。*BCNG交叉开发模式Typicalscenario:1.Boottarget. 4.Downloadobjectmodule.2.Attachtargetserver.5.Test&Debug.3.Edit&compile. 6.Returnto3or1asnecessaryTheaboveslideillustratesacommonsetupforcross-development.Otherconfigurationsarepossible: -Thetargetcouldberemotefromthehost. -Thetargetmightnothaveaserialconnection;ormighthaveonlyaserial connection,notanethernetconnection. -AROMemulatorsuchasNetROM,oranICE,mightbeusedasthe communicationlink.Intheconfigurationpicturedabove,thetargetwould(duringdevelopment)obtainitsVxWorksimageacrossthenetworkconnectionwhenitboots.Codeisedited,compiled,version-managed,etc.,onthedevelopmenthost.Individualobjectmodulesmaybedownloadedfromthedevelopmenthosttothetarget,anddynamicallylinkedintotheVxWorksimageandothercodealreadypresentonthetarget.UsingTornadotoolssuchastheCrossWinddebuggerandWindShshell,thedevelopermaytestanddebugthedownloadedmodules.Diagnosticoutputmightgoacrosstheserialconnection.Thecommunicationofthetoolswiththetarget,aswellasthedownloadingofcode,ismediatedbytheTargetServeronthehost,andtheWDBagentonthetarget.Thebackendcommunicationbetweenthesetwowouldusuallymakeuseoftheethernet,forspeed;forsystemmodedebugging,aserialbackendwouldbeused.*BCNGHOSTTARGETVxWorksdebugagenttargetservertargetsymboltabledynamicloaderLAUNCHERTheTornadoIIOpenEnvironmentUserapplicationPerformancePakWindViewLook!CodeTEST/MemoryStethoScopeCodeTEST/CoverageCodeBrowserC/C++CompilerCInterpreterShellDebuggerProjectBuilderSniff+RTOSObjectBrowserMyBrowserbackendBCNGTornado宿主端-目标端间通信TargetServerandTargetAgentmediatecommunicationwiththetargetfortheTornadotools.*BCNGTornado演示讲解BCNGVxWorks操作系统详解BCNGVxworks操作系统组成 高性能实时内核:WIND I/O系统 文件系统 BSP 网络组件 共享内存与虚拟内存 目标机驻留工具BCNGVxworks操作系统组成续 工具库 性能评估工具 目标机代理 VxWorks仿真器和逻辑分析仪(WindView)BCNG内核、任务、以及任务间通信BCNG内核(Kernel) VxWorks的内核叫Wind 包括 多任务抢占和优先权调度 任务间同步和通信 中断处理 WatchDog定时器 内存管理多任务内核、任务机制、任务间通信和中断处理机制是VxWorks运行环境的核心。其中,多任务和任务间通信是现代实时操作系统的基石。BCNG任务 具有一定属性的运行程序 内核调度单位,优先级,状态 TCB(任务控制块)BCNG内核—任务状态转换一切就绪,只差CPU 等待某种资源 处于睡眠状态,延迟一段时间被中断,用于调试任务状态反映任务当前在系统所处的情形。内核负责维护系统中所有任务的当前状态。一个任务从一个状态转变为另一个状态是应用调用内核调用的结果。*BCNG任务状态队列执行内核负责维护系统中所有任务的当前状态。一个任务的状态转变是应用调用内核调用的结果。BCNG内核—Wind任务调度 优先级抢占调度(缺省) 优先级高的Task抢占CPU 0-255,256个优先级,0级最高,255级最低 轮询调度 优先级相同时,多个Task轮流占用CPU 抢占锁定 独占CPU,其它高优先级的Task不能抢占CPUtaskLockBCNG内核—WindTask调度基于优先级的抢占调度基于优先级的抢占调度与轮转调度算法结合BCNG内核—任务控制函数 taskSpawn():创建并激活一个task(定位) taskInit():初始化一个新task taskActivate():激活一个task TaskID:32bits,指向task控制块的指针(ID0指调用task) TaskName:代表task的ASCII字符串 Task选项 获取Task信息 Task删除和删除保险 Task控制:改变task的状态低级操作参数:所有从目标机启动的任务以字母t开头BCNG内核—任务扩展函数 为扩展与task相关的功能,Wind提供勾连(hook)功能,在task创建、切换、删除时,自动唤起相关的勾连例程。 在TCB中有一个字段存放此扩展 taskCreateHookAdd( ) 每个task创建时增加一个例程 taskCreateHookDelete( )  taskSwitchHookAdd( )  taskSwitchHookDelete( )  taskDeleteHookAdd( )  taskDeleteHookDelete( ) BCNG内核—任务错误状态:errno Errno是一个预定义的全局变量 多任务情况下,每个任务有自己的errno,作为task上下文的一部分,中断服务程序(ISR)也有自己的errno 惯例:程序返回OK(0)表示成功,ERROR(-1)表示失败;若返回指针,则NULL(0)表示失败。 返回ERROR或NULL时,通常设置errno表示具体错误代码 Errno总表示最近的错误状态,不会被清除 如果errno在错误状态符号表(statSymTbl)中有对应字符串,则可以使用printErrno()显示错误(不能用在ISR中) 尽量使用logMsg()来显示错误信息,因为它在task和ISR下都能工作BCNG内核—任务异常处理 VxWorks的异常处理包负责所有异常处理 缺省的异常处理是挂起此task,并保存异常点的task状态,其它task继续运行 Tornado的开发工具可以查看挂起task的状态 也可以通过信号(signal)将某硬件或软件的异常处理与自己的处理程序关联BCNG内核—共享代码和重入 被多个task调用的代码叫共享代码,共享代码必须可重入 若代码要修改全局/静态变量,则不可重入,否则会引起数据混乱 多数例程可重入,但如果例程foo()还有一个对应的foo_r()例程,则foo()是不可重入的 VxWorks使用以下可重入技术: 动态堆栈变量 全局变量和静态变量由信号量守护 任务变量Taskone(void){MyFune();}Tasktwo(void){MyFune();}MyFune(void){……}任务代码共享BCNG内核—VxWorks系统任务 RootTask,tUsrRoot是内核执行的第一个task,它创建其它task,完成任务后被停止并删除 日志Task,tLogTask记录系统日志消息,而不必执行I/O 异常Task,tExcTask支持VxWorks的异常处理 网络Task,tNetTask处理网络的任务级别的功能 目标机代理Task,tWdbTask处理debug请求 Task可选组件 tShell、tRlogind、tTelnetd、tPortmapdBCNG任务间通信 共享数据结构/内存共享(Sharedmemory):简单的数据共享方法 信号量(Semaphore):用于基本的互斥及同步 消息队列(MessageQueue)和管道(Pipes):用于同一CPU上任务间消息的传递 套接口(Socket)和远程程序调用(RPC):用于网络上任务间的通信 信号(Signals):用于异常处理BCNG任务间通信——共享数据结构 共享数据结构 VxWorks中所有task存在于一个线性的地址空间中,所以task之间共享数据结构很容易 这些数据结构可以是 全局变量 线形缓冲区 环形缓冲区 链表 指针BCNG任务间通信——互斥 为避免内存访问竞争,需要内存访问互锁 有许多方法可以实现资源的访问互斥: 禁止中断、禁止抢占、信号量 禁止中断(最强大,时间要尽量短) intlock=intLock(); ..  criticalregionthatcannotbeinterrupted. intUnlock(lock); 禁止抢占(可以被中断)taskLock();BCNG任务间通信——信号量 信号量(Semaphore)是解决互斥和任务同步的最主要手段 信号量提供比中断禁止和抢占禁止更精细的互斥 信号量协调任务的执行和外部事件,以实现任务同步 Wind将信号量优化为三类,以解决不同类型的问题: 二进制:最快,最通用的信号量,用于同步和互斥 互斥:专门解决互斥问题而优化的二进制信号量:优先权继承、删除保护和递归 计数:类似二进制,但记录信号量发放的次数,为守护资源的多个实例而优化BCNG任务间通信——消息队列 任何task或者ISR都可以向消息队列中放入消息,多个task可以向同一个消息队列中发送消息或者从其中接收消息 两个task之间的双向通信,通常需要两个消息队列,每个方向一个 消息队列中的消息个数和每个消息的长度都是可变的 VxWorks支持两种消息队列库: WindQueue POSIXQueue 超时BCNG任务间通信——管道(Pipes) 管道是虚拟的I/O设备 Task使用标准的I/O例程操作管道 Open,read,write,ioctl 管道支持select函数BCNG任务间通信—Task网络通信 Sockets 支持TCP/UDP 与BSD4.4UNIX兼容 远端过程调用(RPC) RPC允许一个机器上的进程调用同一个机器或者别的机器上运行的过程 RPC内部使用socket作为底层通信手段BCNG任务间通信——信号(Signal) 信号可以异步地改变task的执行流程 任何task或ISR都可以向某个task发送一个信号 收到信号的task立即挂起,下次被调度时运行信号处理例程 信号处理例程使用接收task的上下文和堆栈 信号处理例程应当作ISR来对待 即使接收task被阻塞,依然能够唤醒信号处理例程 信号更适用于错误或异常处理,而不是一般的Task通信BCNGPOSIX、ISR、WatchDogBCNGPOSIX兼容 POSIX:thePortableOperationSystemInterface ISO/IEEE制定的一组接口,以支持应用程序在不同操作系统上的源代码的移植,使用这些接口有助于将软件从一个操作系统移植到另一个操作系统。 实时操作系统对应的POSIX接口标准为1003.1b(原来的1003.4),VxWorks几乎都支持,重要包括: 异步I/O、信号量、消息队列、内存管理、排队信号 调度、时钟和定时器BCNGPOSIX接口 VxWorksWind内核包括:POSIX接口和专为VxWorks设计的接口,对应两种不同调度。 POSIX调度 基于进程(不可直接访问内存,父子关系) 基于FIFO,优先数越高,优先级越高 Wind调度 基于任务(可直接访问内存) 基于优先级的抢占式调度,优先数越低,优先级越高 POSIX时钟和定时器,支持多个虚拟时钟BCNG中断服务代码(ISR) 为尽快响应中断请求,中断服务例程在task上下文以外的特别的上下文中运行,因而唤醒ISR,不需要切换任务上下文 使用intConnect(),可以将C函数与任何中断连接起来 有些结构支持独立的中断堆栈,有些不支持,由BSP决定 ISR的特别限制(没有TCB): ISR不能调用可能使自己被阻塞的例程 ISR不能分配和释放内存,或调用包含分配和释放内存的函数 ISR不能通过I/O访问设备,因为可能阻塞 ISR使用logMsg()来向控制台(console)打印消息BCNG中断服务代码 ISR出现异常时无法挂起,VxWorks将异常描述存放到低端内存,然后重新启动系统;VxWorksbootROM测试低端内存,并将异常描述打印到控制台上 可以为某些事件预留最高级别的中断,实现0时延响应 ISR到Task的通信 共享内存和环形缓冲区 信号量(ISR只能释放信号量) 消息队列(使用NO_WAIT参数) 管道(只能write) 信号(ISR用信号通知Task)BCNGWatchDog定时器 VxWorks提供WatchdogTimer机制,允许任何C函数与一个特定的时间延迟相联系。通常,作为系统中断服务程序的一部分来维护。 利用Watchdog来处理任务时限 wdCreate( ) 分配并初始化一个watchdog定时器 wdDelete( ) 终止并删除一个watchdog定时器  wdStart( ) 启动一个watchdog定时器  wdCancel( ) 取消一个正在计时的watchdogBCNGI/O系统 VxWorks的I/O系统提供对多种设备的统一访问 基本I/O例程:creat( ),remove( ),open( ),close( ),read( ),write( ),ioctl( ). 高级I/O例程:printf( ),scanf( ) VxWorks提供标准缓冲I/O例程 fopen( ),fclose( ),fread( ),fwrite( ),getc( ),putc( ) VxWorks的I/O系统还提供POSIX兼容的异步I/O 在执行任务其它动作的同时执行输入和输出 VxWorks可动态安装和卸载设备驱动而无需重新启动系统BCNGVxWorks的I/O系统 VxWorks的I/O系统为各种设备提供简单的、统一的、与设备无关的接口,包括: 面向字符的设备,如终端 随机访问块设备,如磁盘 虚拟设备,如task间的管道和socket 监视和控制设备,如数字/模拟I/O设备 访问远端设备的网络设备 VxWorks为基本I/O和有缓冲区I/O提供标准C库 VxWorks的I/O系统设计使之比大多数I/O系统更快更灵活,这对实时系统很重要BCNGVxWorks的I/O系统BCNG文件、设备及驱动 在VxWorks中,应用程序通过打开文件来访问I/O设备 文件指下面两种事物之一: 未结构化的“原始”设备,如串行通信通道或者任务间管道 位于一个结构化的、随机访问的、包含文件系统的设备上的逻辑文件 I/O设备有两个级别:基本I/O和有缓冲区I/O 文件名和缺省设备: /usr NFS网络设备 Host: Non-NFS网络设备 Dev: dosFs文件系统设备BCNG基本I/O 基本I/O在VxWorks中是最低级的I/O,其接口与标准C库的I/O原语兼容 creat( ) 创建一个文件 open( ) 打开一个文件(也可创建一个文件)  close( ) 关闭一个文件 read( ) 读一个已经创建或打开的文件 write( ) 写一个已经创建或打开的文件 ioctl( ) 对文件或设备执行特定控制功能 在基本I/O级别,文件用文件描述字(fd)指示,它是一个整数,在creat()或open()时返回 Fd不用后应及时关闭,以节约资源BCNGioctl() 为了运行某些不适合于其它基本I/O的I/O函数,使用ioctl()设置或查询一些属性,譬如: 当前设备可输入多少字节 设置设备的特定选项 获取某个文件系统的信息 Ioctl()的参数是fd、指示请求函数的代码、和一个函数需要的参数: result=ioctl(fd,function,arg); 将一个tty设备的数据波特率设为9600的例子: status=ioctl(fd,FIOBAUDRATE,9600);BCNG有缓存的I/O:Stdio 低级I/O调用会带来一些开销,为提高I/O访问的灵活性和效率VxWorks提供了有缓存的I/O机制 Stdio的I/O函数提供透明的缓存机制,提高访问效率 FILE*fp; fp=fopen("/usr/foo","r"); 标准输入、输出、和出错 Stdin Stdout StderrBCNG其它格式化I/O 特殊情况: printf( ),sprintf( ),andsscanf( )属于fioLib,没有缓存 附加函数: printErr( )andfdprintf( ) 消息日志 提供日志功能 避免当前任务访问I/O 可以重定向到其它I/OBCNGVxWorks中的设备 ttyDrv  Terminaldriver  ptyDrv  Pseudo-terminaldriver  pipeDrv  Pipedriver  memDrv  Pseudomemorydevicedriver  nfsDrv  NFSclientdriver  netDrv  Networkdriverforremotefileaccess  ramDrv  RAMdriverforcreatingaRAMdisk  scsiLib  SCSIinterfacelibrary  -  Otherhardware-specificdrivers BCNGVxWorks与主机系统的I/O差别 设备配置:在VxWorks中设备驱动可以动态安装和卸载 文件描述字:在Windows和Unix中,fd是进程中唯一的;在VxWorks中fd是全局唯一的,标准输入输出例外(0,1,2) I/O控制:Unix和VxWorks中传给ioctl()的参数可能不同 驱动例程:Unix下设备驱动运行于系统模式下,不可抢占;VxWorks下的设备驱动运行于线程模式下,可抢占。BCNG内部结构 多数系统的设备驱动只提供少数低级I/O例程,如输入、输出等;大部分工作由I/O系统完成。 驱动易实现 设备动作尽可能类似 驱动编写人员很难完成I/O系统未提供的协议 VxWorks中I/O系统用于将用户请求交给适当的设备驱动,每个驱动根据自己的情况处理用户的I/O请求。 VxWorks提供高级例程库用于设备驱动的编写 为标准设备写驱动很容易,编码量小 可以根据情况用非标准方式实现用户请求BCNG设备驱动程序 驱动初始化例程xxDrv() 安装驱动、分配数据结构、连接中断服务例程、初始化硬件 设备创建xxDevCreate() 给驱动增加一个设备,参数包括缓冲区大小、设备地址等 为设备初始化数据结构、信号量和硬件等 基本I/O功能 xxOpen(),xxRead(),xxWrite(),xxIoctl() 中断服务例程xxInterrupt()BCNG驱动安装 I/O系统维护一个驱动表,将用户的I/O请求转换为适当的驱动程序 使用iosDrvInstall()动态安装驱动,参数为新驱动的7个I/O例程的地址,iosDrvInstall()将地址放入驱动表的空闲条目,返回此条目的索引,称为驱动号。 文件系统在驱动表中有自己的条目,它们在文件系统库初始化时创建。BCNG驱动安装举例BCNG设备 一些驱动可以为某种设备的多个实例服务 在VxWorks中,数据结构设备头(DEV_HDR)定义设备 设备名,设备的驱动的编号(Index) DEV_HDR保存在驻留内存的设备列表(device_list)中 DEV_HDR是设备描述字(devicedescriptor)的开始部分,后者包括特定设备的数据: 设备地址,缓冲区,信号量 设备描述字只要以DEV_HDR开头便可,可包含任何与设备相关的信息BCNG设备列表和增加设备 调用iosDevAdd()动态增加非块设备,参数为新设备的描述字的地址、设备名和驱动编号 驱动程序只需要填写描述字中与设备相关信息,不需要填写设备头;iosDevAdd()在设备头中填入设备名称和驱动编号,然后加入设备列表 增加块设备需要调用与此块设备文件系统相关的设备初始化例程,这个例程将自动调用iosDevAdd()BCNG增加设备的例子BCNG文件描述字 可以同时对一个设备打开多个fd 一个设备的驱动维护I/O系统设备信息和与fd相关的信息(如文件偏移量) 也可以对一个非块设备打开多个fd,如tty,这些fd没有附加信息,所以对它们的写操作效果相同BCNGFd表 文件用open()或creat()打开,I/O系统在设备列表中搜索与文件名最匹配的设备,找到后用设备头中的驱动编号查找对应的驱动表中的打开例程。 I/O系统必须建立fd与驱动之间的联系 驱动必须将每个fd与特定数据结构关联起来,在非块设备的情况下,通常是设备描述字 I/O系统在fd表中维护这些联系。表中包括 驱动编号 驱动确定的4字节值(用于标识文件)BCNG打开文件BCNG打开文件BCNG从文件中读取数据BCNG关闭文件 用户使用close()关闭文件 I/O系统根据fd表找到对应驱动的关闭例程 驱动的关闭例程运行之后,I/O系统将fd表中对应条目标识为可用BCNG实现select() Select()可以使一个task等待在多个I/O上,或者超时返回。 设备驱动支持select()的方法和步骤,参见VxWorks编程(VxWorksProgramGuide)的3.9.3节BCNG谢谢!MicroKerneldesignforscalabilityandportabilityRichkernelfeaturesetPre-emptive,prioritybasedandroundrobinschedulingBinary,countingandmutualexclusionsemaphoreswithpriorityinheritanceMessagequeues,sharedmemoryPOSIXpipes,countingsemaphores,messagequeuesandsignals*它允许将任务分布在多个CPU上执行以提高效率。它透明的、高性能的设计使得在不同CPU上运行的任务可以通过现有的通信机制,如信号灯、消息队列等进行同步和数据交换。Leveragessharedmemoryforgloballysharedobjects(全局目标可共享内存)Semaphores,messagequeues,memorypools(信号灯,消息队列,内存池)Supportsupto20CPUsUserconfigurablesharedmemorypoolsize(用户自定义共享内存池的大小)*SENSEnhancedNetworkingStackBSD4.4compatiblesocketlibraryAddscontemporaryInternetfeaturesCIOR,DHCP,DNS,SNTP,IPmulticastingOptional,integratedOSPFroutingsupportIntegratedMIB-IIsupportOptionalSNMPv1,v2csupportSTREAMSframeworksupport15-20%performanceimprovement*Tornado是嵌入式实时领域里最新一代的开发调试环境。Tornado给嵌入式系统开发人员提供了一个不受目标机资源限制的超级开发和调试环境。Tornado包含三个高度集成的部分:运行在宿主机和目标机上的强有力的交叉开发工具和实用程序;运行在目标机上的高性能、可裁剪的实时操作系统VxWorks;连接宿主机和目标机的多种通讯方式,如:以太网,串口线,ICE或ROM仿真器等。*Theaboveslideillustratesacommonsetupforcross-development.Otherconfigurationsarepossible: -Thetargetcouldberemotefromthehost. -Thetargetmightnothaveaserialconnection;ormighthaveonlyaserial connection,notanethernetconnection. -AROMemulatorsuchasNetROM,oranICE,mightbeusedasthe communicationlink.Intheconfigurationpicturedabove,thetargetwould(duringdevelopment)obtainitsVxWorksimageacrossthenetworkconnectionwhenitboots.Codeisedited,compiled,version-managed,etc.,onthedevelopmenthost.Individualobjectmodulesmaybedownloadedfromthedevelopmenthosttothetarget,anddynamicallylinkedintotheVxWorksimageandothercodealreadypresentonthetarget.UsingTornadotoolssuchastheCrossWinddebuggerandWindShshell,thedevelopermaytestanddebugthedownloadedmodules.Diagnosticoutputmightgoacrosstheserialconnection.Thecommunicationofthetoolswiththetarget,aswellasthedownloadingofcode,ismediatedbytheTargetServeronthehost,andtheWDBagentonthetarget.Thebackendcommunicationbetweenthesetwowouldusuallymakeuseoftheethernet,forspeed;forsystemmodedebugging,aserialbackendwouldbeused.*TargetServerandTargetAgentmediatecommunicationwiththetargetfortheTornadotools.*任务状态反映任务当前在系统所处的情形。内核负责维护系统中所有任务的当前状态。一个任务从一个状态转变为另一个状态是应用调用内核调用的结果。*
/
本文档为【Vxworks基础】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索