您的位置 首页 制造

根据嵌入式操作系统的VxWorks设备驱动程序设计

基于嵌入式操作系统的VxWorks设备驱动程序设计-VxWorks是WindRiver公司开发的一种高性能的嵌入式实时操作系统(RTOS),以其优良的可靠性、开放性、实时性和易用性赢得了大量的客户。VxWorks是目前嵌入式系统领域中使用最广泛、市场占有率最高的系统,被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。

VxWorks是WindRiver公司开发的一种高功能的嵌入式实时操作体系(RTOS),以其优秀的牢靠性、开放性、实时性和易用性赢得了很多的客户。VxWorks是现在嵌入式体系范畴中运用最广泛、市场占有率最高的体系,被广泛地运用在通讯、军事、航空、航天等高精尖技能及实时性要求极高的范畴中,如卫星通讯、军事演习、弹道制导、飞机导航等。

在现在大都操作体系中,用户有必要经过驱动程序才能与设备进行交互,正是设备驱动程序为其供给了可拜访性和可操作性,而设备驱动程序本身跟操作体系的相关性特别亲近。本文针对VxWorks操作体系特色,剖析设备驱动程序的功用、组成和开发进程,并给出END网口驱动程序的一个规划实例。

1 嵌入式实时操作体系VxWorks

下面首要环绕VxWorks的特色和结构这两个要害问题进行论说。

1.1 VxWorks的特色

1)牢靠性 操作体系的用户期望在一个作业安稳、能够信赖的环境中作业,所以操作体系的牢靠性是用户首要要考虑的问题。而安稳、牢靠一直是VxWorks的一个杰出长处。自从对我国的出售解禁以来,VxWorks以其杰出的牢靠性在我国赢得了越来越多的用户。

2)实时性 实时性是指能够在限制时刻内履行完规则的功用并对外部的异步事情做出呼应的才能。实时性的强弱是以完结规则功用和做出呼应时刻的长短来衡量的。VxWorks的实时性十分强,其体系本身的开支很小,进程调度、进程间通讯、中止处理等体系共用程序精练而有用,它们形成的推迟很短。VxWorks供给的多使命机制中对使命的操控选用了优先级抢占(Preemptive Priority Scheduling)和轮转调度(Round-Robin Scheduling)机制,也充沛确保了牢靠的实时性,使相同的硬件装备能满意更强的实时性要求,为运用的开发留下更大的地步。

3)可削减性 用户在运用操作体系时,并不是操作体系中的每一个部件都要用到。例如图形显现、文件体系以及一些设备驱动在某些嵌入式体系中往往并不运用。VxWorks由一个体积很小的内核及一些能够依据需求进行定制的体系模块组成。VxWorks内核最小为8 kB,即使加上其他必要模块,所占用的空间也很小,且不失其实时、多使命的体系特征。因为它的高度灵敏性,用户能够很容易地对这一操作体系进行定制或作恰当开发,来满意自己的实践运用需求。

1.2 VxWorks体系结构

VxWorks体系结构如图1所示,能够从6部分来阐明。

依据嵌入式操作体系的VxWorks设备驱动程序规划

1)高功能实时内核(Wind Kernel) VxWorks的中心,一般称作Wind,Wind运用中止驱动和依据优先级的调度方法。担任多使命调度、使命间的同步、进程间通讯机制、中止处理、看门狗和内存办理机制。

2)文件体系(File System) VxWorks供给快速文件,它包括几种支撑运用块设备(如磁盘)的本地文件体系。这些设备都运用一个规范的接口,然后使得文件体系能够灵敏地在设备驱动程序上移植。别的,VxWorks也支撑SCSI磁带设备的本地文件体系。

3)设备驱动(Device Drivers) VxWorks体系供给BSP、Network Driver、SCSI Driver构成硬件笼统层。硬件笼统层是一个介于操作体系和底层硬件之间的软层次,包括了体系中大部分与硬件相关的软件模块。在功用上包括两部分:体系初始化及与硬件相关的设备驱动。

4)I/O体系(I/O System) VxWorks供给了一个快速灵敏的与ANSIC兼容的I/O体系,包括UNIX规范的缓冲I/O和POSIX规范的异步I/O 。

5)网络仓库(Network Stack) VxWorks供给了对其他网络和TCP/IP网络体系的“通明”拜访,包括与BSD套接字兼容的编程接口,长途进程调用(RPC),长途文件拜访以及BOOTP和ARP署理。一切的VxWorks网络机制都遵从规范的Intemet协议。

6)板级支撑包 BSP(Board Support Package)板级支撑包向VxWorks操作体系供给了对各种板子的硬件功用操作的共同的软件接口,它是确保VxWorks操作体系可移植性的要害,它包括硬件初始化、中止的发生和处理、硬件时钟和计时器办理、局域和总线内存地址映射、内存分配等等。每个板级支撑包括一个ROM发动(Boot ROM)或其他发动机制。

2 VxWorks设备驱动程序的规划

为了完结运用程序的可移植性,将运用程序从直接操作硬件设备中解放出来,VxWorks操作体系为运用程序操作硬件设备供给一个共同的接口。这个接口便是由操作体系的I/O体系供给的。I/O体系将运用程序的I/O恳求传递给设备专用的I/O函数。这些设备专用的I/0函数便是由设备驱动程序供给的。本章从功用、接口与结构3个视点论说设备驱动程序的规划。

2.1 设备驱动程序的功用

1)对设备进行初始化 初始化的意图是使设备处于某种作业状况,以便用户程序拜访该设备。

2)翻开设备操作 翻开设备操作实践上是查询用户指定的设备,并检查用户是否能够运用该设备。因为设备是同享资源,当设备正在被运用时,体系要对它进行维护,制止其他使命对设备进行操作,直到设备资源被开释。

3)封闭设备操作 封闭设备操作便是开释设备资源。使命对设备完结操作后,有必要进行封闭设备操作,不然设备总是处于被占用状况,其他使命无法运用。与翻开设备操作相对应,有翻开操作就应该有封闭操作。

4)从设备上接纳数据并提交给体系 这项功用一般便是所说的读操作,接纳外部传输来的数据。接纳数据选用的方法有查询方法、中止方法和DMA方法。

5)把数据从主机上发送给设备 这项功用对应一般的写操作,把主机上的数据传送给外界。一般体系主动调用该操作进行数据发送,有时也采纳中止方法发送数据。

6)对设备进行操控操作 在运用设备进程中,有时依据运用的需求对设备进行操控(例如改动设备某个状况),而操控操作就能供给这种功用。

2.2 设备驱动程序的接口

VxWorks通用设备驱动程序根本都是经过I/O体系来存取的,这样做的长处是能够屏蔽底层硬件,对上层运用程序供给共同的接口。Vx-Works的I/O体系由根本I/O及含buffer的I/O组成,它供给规范的C库函数,根本I/O库与Unix兼容,而含buffer的I/O则与ANSI C兼容。VxWorks的I/O体系有其共同的特性,使得它比其他I/O体系更快速、灵敏,这在实时体系中十分重要。还有一些特别的通用IO设备驱动程序如串行通用IO设备驱动程序因为其本身的特性,尽管不是经过规范I/O来进行存取的,可是也都有它们各自相关的规范。下面只介绍经过I/O体系存取的通用IO设备驱动程序。

VxWorks作为实时操作体系为了能够更快、更灵敏地进行I/O操作,供给了若干库来支撑规范的字符设备和块设备。一个字符设备的驱动程序和I/O体系直接效果,调用驱动程序装置函数iosDrvInstall()在VxWorks中装置驱动程序。它履行7个根本的I/O操作:create,rem-ove,open,close,read,write和ioctl。假如设备不支撑某些I/O操作,则相应的程序能够被省掉。iosDrvInstall()仅仅为驱动程序在驱动程序表平分配了一个方位,要运转驱动程序还需求调用设备装置函数iosDevAdd()。iosDevAdd()把设备名和驱动程序号写到数据结构DEV_ HDR中,并把它加到体系的设备列表中。

一个块设备的驱动挂在文件体系上比直接挂在I/O体系上运用起来更便利。它先和文件体系效果,再由文件体系与I/O体系效果。块设备驱动程序不运用iosDrvlnstall()来装置驱动程序,而是经过初始化块设备描述结构BLK_DEV或次序设备描述结构SEQ_DEV来完结驱动程序供给给文件体系的功用。相似的,块设备驱动程序不运用iosDevAdd()来将驱动程序装入I/O体系,而是运用文件体系设备初始化函数,如dos-FsDevInit()来完结。实践上,文件体系把自己作为一个驱动程序装到I/O体系中,并把恳求转发给实践的设备驱动程序。

2.3 设备驱动程序的组成

设备驱动程序包括3部分:初始化部分、函数功用部分和中止服务程序ISR。

1)初始化部分初始化硬件,分配设备所需的资源,完结一切与体系相关的设置。假如是字符设备,首要调用iosDrvInstall()来装置驱动程序,把中止向量和ISR挂上,然后调用iosDevAdd()将驱动程序参加I/O体系中;假如是块设备,首要把中止向量和ISR挂上,在内存平分配一个设备结构,然后初始化该结构。用户要运用该设备时,先调用设备初始化函数xxlnit(),再调用设备创立函数xxDevCreate(),回来一个BLK_DEV结构的指针,供文件体系初始化函数运用。

2)函数功用部分完结体系指定的功用。关于字符设备,这些函数便是指定的7个规范的I/O函数;关于块设备,则是在BLK_DEV或SEQ_DEV结构中指定的功用函数。

3)中止服务程序是实时体系的重要组成部分,体系经过中止机制来了解外部事情,并作出呼应。实时体系的反应速度取决于体系对中止的呼应速度和中止处理程序的处理速度。因而,中止服务程序的处理时刻应尽量短。一切的中止服务程序同享一个仓库,没有使命操控块,所以,在中止服务程序中不能运用可导致堵塞的函数,如printf(…)、semTake(…)等。中止服务程序中能够运用semGive(…)与其他的非中止服务程序进行通讯。抱负的状况,一个中止服务程序仅调用一个semGive(…)体系调用,也便是说,中止服务程序的主要功用应该是建议一个使命来完结必要的处理。为进步中止服务程序与使命的协作功能,最好的机制是信号量。

3 END网口驱动开发

经过上述论说,本章经过END网口驱动的实例详细阐明设备驱动程序的开发进程。

1)驱动程序的设备装置函数 在BSP中对confidh,configNeth文件进行修正。首要在configh中增加#define INCLUDE_END,其次在configNeth文件中endTb1中增加一行:

依据嵌入式操作体系的VxWorks设备驱动程序规划

其间每行的第1项是设备的单元号;第2项是驱动程序的endLoad()进口点;第3项是要传给该进口点的字符串,该字符串一般标明内存地址、I/O地址和中止号等参数;第4项标明是否支撑缓冲区借出;第5项标明BSP私有数据;第6项是履行标志,为FALSE标明该进口点还未被履行,在体系成功装载一个驱动程序后,该值被改为True。设置该值为True是为了避免体系主动装载该驱动。做完上述作业后,驱动程序就能够增加到VxWorks中。

2)设备加载函数 sysEndLoad()是END网口驱动程序的初始化进口点,该函数的参数由tUserRoot使命在调用muxDevLoad()传入,muxDev-Load()从而运用该参数调用sysEndLoad()。sysEndLoad()中履行几个必要操作:初始化END_OBJ结构、初始化网络缓冲内存、初始化MIB、设置网络准备好标志。其函数格局:

END_OKJ*sysEndLoad(char*initString)。其间initString由网络设备表(endDevTb1[])中的成员供给。设备的一切特别参数都是经过initString参数进行传递的。它包括如下特别参数:设备寄存器基地址、中止向量、中止级、同享缓冲区地址等。

3)翻开设备函数 endStart()函数完结设备中止校验操作、注册驱动程序的中止服务程序、翻开设备中止、记载设备发动和发动设备。它调用bsp的函数衔接中止和驱动程序设备,使设备作业在中止形式下。其函数格局如下:

STATUS endStart(END_DEVICE*pDrvCtrl)。发动设备成功时,回来OK。函数完结如下:

依据嵌入式操作体系的VxWorks设备驱动程序规划

4)设备读/写 设备的读操作和写操作是两个相反的动作,一个向设备发送数据,一个从设备接纳数据。

当网络协议层要发送数据时,协议驱动首要调用Mux层的API函数MuxSend(),MuxSend()经过调用函数endSend()把上层传过来的数据从mblk-clblk-cluster结构中发送到网络中。

在NET_FUNCS结构中并不供给endReceive()函数。所以接纳包的完结要依托中止的触发,当驱动软件接纳到包时引发一个接纳中止例程。该中止把数据缓冲区cluster与mblk,clblk结构衔接。经过调用函数指针receiveRtn,指向Mux层API函数MuxReceive(),该函数把接纳到的包传到Mux层。假如该函数回来OK,标明数据包被正确传输。承受函数MuxReceive()经过调用函数stackRcvRtn再把数据包传输到上层协议层。

5)封闭设备 封闭操作是翻开操作的逆进程,当需求封闭网卡的时分,体系经过MUX层调用函数endStop()来完结。

该函数开释中止向量,中止接纳和发送寄存器的DMA处理,并将电源放置到低功耗。

6)设备中止办理 设备进行读/写操作时运用,当设备上接纳到数据或数据发送结束时,经过触发中止信号。向体系陈述这一状况,体系便履行中止服务函数进行相应的处理。

驱动程序在MuxDevStart()函数中衔接中止服务程序,中止服务程序是经过intConnect()函数挂接在某个中止向量上的,当网络层呈现中止时,网络使命将调用中止服务程序,中止服务程序要调用一个函数netJobAdd(FUNCPTR rouTIne,intparaml,int param2,int param3,int param4,int param5)其间rouTIne指向需求处理的函数进口,5个参数可用来传递给处理函数,中止服务程序在网络设备的数据包接纳和发送中扮演着重要的人物,担任处理接纳中止和承受中止,其进程是:读中止状况寄存器,清中止事情,依据中止状况,调用相应的中止处理程序。

4 定论

嵌入式实时操作体系VxWorks以其占用资源少,功能安稳等许多长处而得到了越来越广泛的运用。嵌入式体系中I/O设备是要害的一环,为I/O设备编写高效无误的驱动程序是开发嵌入式体系的重要问题。本文剖析了VxWorks中I/O设备驱动程序的结构及其规划进程,并给出了详细设备驱动程序的开发流程。

在课题研讨进程中,完结了END网口的驱动,并经过操控器之间的数据通讯验证了驱动的正确性。VxWorks的I/O体系将设备程序作为内核进程完结的实时性和牢靠性有了很大的进步,更重要的是为用户供给了共同的接口。为后续开发供给了更大的便利。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/99086.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部