VxWorks设备驱动开发详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 VxWorks操作系统基本特点

VxWorks是专门为实时嵌入式系统设计开发的操作系统内核,为程序员提供了高效的实时多任务调度、中断管理、实时的系统资源以及实时的任务间通信。在各种CPU平台上提供了统一的编程接口和一致的运行特性,尽可能地屏蔽了不同CPU之间的底层差异。程序员可以将精力尽可能多地放在应用程序本身,而不必再去关心系统资源的管理。基于VxWorks操作系统的应用程序可以在不同CPU平台上轻松移植。

VxWorks是美国Wind River System公司(以下简称风河公司,即WRS公司)推出的一个实时操作系统。WRS公司组建于1981年,是一个专门从事实时操作系统开发与生产的软件公司,该公司在实时操作系统领域被世界公认为是最具有领导作用的公司。

VxWorks是一个运行在目标机上的高性能、可裁减的嵌入式实时操作系统。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通信、军事演习、弹道制导、飞机导航等。在美国的F-16、FA-18战斗机、B-2隐形轰炸机和爱国者导弹上,1997年4月在火星表面登陆的火星探路者上也使用了VxWorks。

VxWorks是一种功能强大而且比较复杂的操作系统,包括了进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几个部分。VxWorks只占用了很小的存储空间,并可高度裁减,保证了系统能以较高的效率运行。所以,仅仅依靠人工编程调试,很难发挥它的功能并设计出可靠、高效的嵌入式系统,必须要有与之相适应的开发工具。Tornado II就是为开发VxWorks应用系统提供的集成开发环境,Tornado II中包含的工程管理软件可以将用户自己的代码与VxWorks的核心有效地组合起来,可以按用户的需要裁减配置VxWorks内核;vxSim原型仿真器可以让程序员在不用目标机的情况下,直接开发系统原型,做出系统评估;功能强大的CrossWind调试器可以提供任务级和系统级的调试模式,可以进行多目标机的联调;优化分析工具可以帮助程序员用多种方式真正观察、跟踪系统的运行,排除错误,优化性能。

1.2.1 操作系统内核结构——微内核和宏内核

1.宏内核

宏内核也称为单内核(Monolithic kernel),将内核从整体上作为一个大过程实现,并同时运行在一个单独的地址空间。所有的内核服务都在一个地址空间运行,相互之间直接调用函数,简单高效。单内核是一个很大的进程,它的内部又被分为若干模块(或层次或其他)。但是在运行的时候,它是一个单独的二进制大映像,其模块间的通信是通过直接调用其他模块中的函数实现的,而不是消息传递。

2.微内核

在微内核(Micro kernel)中,大部分内核都作为单独的进程在特权状态下运行,它们通过消息传递进行通信。在典型的情况下,每个概念模块都有一个进程。因此,假如在设计中有一个系统调用模块,那么就必然有一个相应的进程来接收系统调用,并和能够执行系统调用的其他进程(或模块)通信以完成所需任务。在这些设计中,微内核部分经常只是一个消息转发站:当系统调用模块要给其他系统模块发送消息时,消息直接通过内核转发,这种方式有助于实现模块间的隔离。(某些时候,模块也能够直接给其他模块传递消息。)在一些微内核的设计中,更多的功能(如I/O等)也都被封装在内核中。但是最根本的思想还是要保持微内核尽量小,这样只需要把微内核本身进行移植,就能够完成将整个内核移植到新的平台上。其他模块都只依赖于微内核或其他模块,并不直接依赖于硬件。

微内核设计的一个长处是在不影响系统其他部分的情况下,用更高效的实现代替现有系统模块的工作将会更加容易。我们甚至能够在系统运行时将研发出的新系统模块或需要替换现有模块的模块直接而且迅速地加入系统。另外一个长处是不需要的模块将不会被加载到内存中,因此,微内核能够更有效地利用内存。

通常,嵌入式操作系统(如VxWorks)采用微内核设计结构,以节省内存空间,而通用操作系统(如Linux)则采用宏内核设计结构。

1.2.2 VxWorks内核——高性能的微内核设计

处于VxWorks嵌入式实时操作系统核心的是高性能的微内核Wind。这个微内核支持所有的实时特征:快速任务切换、中断支持、抢占式和时间片轮转调度等。微内核设计减少了系统开销,从而保证了对外部事件的快速、确定的反应。

运行环境也提供了有效的任务间通信机制,允许独立的任务在实时系统中与其行动相协调。开发者在开发应用程序时可以使用多种方法:用于简单数据共享的共享内存,用于单CPU的多任务间信息交换的消息队列和管道、套接口,用于网络通信的远程过程调用,用于处理异常事件的信号等。为了控制关键的系统资源,它提供了三种信号灯:二进制、计数、有优先级继承特性的互斥信号灯。

1.2.3 VxWorks开发支持——可裁减的运行软件

VxWorks之所以设计为具有可裁减性,是为了使开发者能够根据自己的应用程序需要,而不是根据操作系统的需要来分配稀少的内存资源。从需要几千字节(KB)内存的深层嵌入式设计到需要更多的操作系统功能复杂的高端实时系统,开发者也许需要从100多个不同的选项中进行选择,以产生上百种配置方式。许多独立的模块都是在开发时要使用而在产品中却不再使用的。而且,这些子系统本身也是可裁减的,这样就允许开发者为最广泛的应用程序进行更为优化的VxWorks运行环境配置。例如,如果应用程序不需要某些功能模块,就可以将它移出ANSI C运行库;如果应用程序不需要某些特定的内核同步对象,这些对象也可以忽略。还有,TCP、UDP、套接口和标准Berkeley服务也可以根据需要将之移出或移入网络协议栈。

上述配置选项可以通过Tornado II的项目工具图形接口轻易地选择。开发者也可以使用Tornado II的自动裁剪特性,自动分析应用程序代码并合并合适的选项。

1.2.4 VxWorks网络支持——综合的网络工具

VxWorks是第一个支持工业标准TCP/IP的实时操作系统。创新的传统伴随着VxWorks TCP/IP协议栈,它支持最新的Berkeley网络特性,包括:

● IP、IGMP、CIDR、TCP、UDP、ARP。

● RIP v.1/v.2。

● Standard Berkeley sockets and zbufs。

● NFS Client and Server、ONC、RPC。

● Point-to-Point Protocol。

● BOOTP、DNS、DHCP、TFTP。

● FTP、rlogin、telnet、rsh。

WindRiver也支持可选的WindNet产品:SNMP v.1/v.2c、OSPF v.2、STREAMS。WindRiver还通过提供工业级最广泛的网络开发环境来加强这些核心技术,这主要是通过WindLink for Tornado II伙伴计划来实现的。高级的网络解决方案还包括:

● ATM、SMDS、frame relay、ISDN、SS7、X.25、V5广域网网络协议。

● IPX/SPX、AppleTalk、SNA局域网网络协议。

● 分布式网络管理的RMON、CMIP/GDMO,基于Web网的解决方案。

● CORBA分布式计算机环境。

1.2.5 VxWorks移植性支持

1.兼容POSIX 1003.1b标准

VxWorks支持POSIX 1003.1b的规定和1003.1中有关基本系统调用的规定,包括:过程初始化、文件与目录、I/O初始化、语言服务、目录处理,而且VxWorks还支持POSIX 1003.1b的实时扩展,主要包括:异步I/O、记数信号量、消息队列、信号、内存管理和调度控制。

2.平台的选择

WindRiver还提供现成的一整套商业和评估版。VxWorks开放的设计具有高度的可移植性,并且支持几乎所有的处理器,这样,应用程序就可以在不同的体系结构之间毫不费力地移植。

3.方便移植到用户硬件上

能否将操作系统和应用程序以一种合适的方式进行移植是嵌入式软件开发方面的关键。如果事先就考虑了操作系统和应用程序代码的可移植性,那么这个过程就会变得非常容易。这需要明确划分低级的依赖于硬件的代码和高级的应用程序和操作系统代码,这样,移植时只需要改变整个依赖于硬件的低级代码,而不需要改变操作系统和应用程序。

依赖于硬件的这一层称为板级支持包(BSP,Board Support Package)。板级支持包是运行VxWorks的任何目标板都需要的。BSP Developer’s Kit使开发者很容易在用户硬件上使用VxWorks;如果使用商业硬件,WindRiver提供了2000个板级支持包。当为用户版开发板级支持包时,开发者可以获得大量的标准设备驱动程序,这些程序对应所有的目标体系。

1.2.6 VxWorks操作系统选件

操作系统选件产品为开发者提供了意想不到的特性和操作系统扩展。这些选件主要包括:

● 板级支持包开发工具(BSP Developer’s Kit)。

● 支持闪存文件系统的TrueFFS for Tornado II。

● 支持图形应用程序。

● 支持虚拟内存管理VxVMI。

● 支持多处理的VxMP、VxDCOM和VxFusion。