vxworks下设备驱动
实时系统VxWorks下设备驱动程序的编写
实时系统VxWorks下设备驱动程序的编写
杨翠娥;王丽敏;王景敏
【期刊名称】《仪器仪表用户》
【年(卷),期】2003(010)004
【摘要】近年来,实时系统得到了越来越广泛的应用,VxWorks是较受欢迎的一种.在嵌入式实时系统中进行软硬件开发的关键是编写高效可靠的设备驱动程序.本文结合实际开发经验介绍了VxWorks系统下开发设备驱动程序的几个重要方面.【总页数】2页(P67-68)
【作者】杨翠娥;王丽敏;王景敏
【作者单位】哈尔滨工程大学信息与通信学院,哈尔滨,150001;哈尔滨工程大学信息与通信学院,哈尔滨,150001;哈尔滨工程大学信息与通信学院,哈尔滨,150001【正文语种】中文
【中图分类】TP31
【相关文献】
1.实时操作系统VxWorks设备驱动程序的编写 [J], 李立志;张朝阳;陈文正
2.嵌入式VxWorks系统下的CPCI设备驱动程序开发 [J], 唐力强;王行祥
3.实时操作系统VxWorks下I/O设备驱动程序的编写技巧 [J], 尚涛;施亮;吴智铭
4.实时操作系统VxWorks下I/O设备驱动程序的编写技巧 [J], 尚涛;施亮;吴智铭
5.实时操作系统VxWorks下I/O设备驱动程序的编写技巧 [J], 尚涛;施亮;吴智铭
因版权原因,仅展示原文概要,查看原文内容请购买。
VxWorks下字符设备的驱动开发
( 国飞 行 试 验 研究 院 , 西 西 安 7 0 8 ) 中 陕 10 9
摘 要 : 着 V W o k 操 作 系统 在 嵌入 式 系统 中的应 用 , x ok 下 产 品 的 开发 和 应 用也 越 来 越 广 泛 。 发 嵌 入 式 设备 经 常遇 到 的 一 随 x rs V W rs 开
Ab ta t s r c :W ih t W or sopeai yse n mbe de yse .Vx or de h r uc e l p e n a pl ai s r n c he Vx k rt ng s t m i e d d s tm W ksun rt e p od td veo m nta d p i ton ae i — c c e sn l wi epr a r aigy d s e d.D e l pm e t o m be de v c s i o l m o n nc un e e n w t w rt f ce t nd r l be de ie veo n fe d d de i e s a pr b e e e o t r d i ho o i e e in a ei l vc i a drv m.I t sp pe .VxW o k e c rve v l pm e tu i e n hi a r r sd vie d i rde eo n nde h an ape t a rt e m i s cs nd how O c fg e t t on ur he PCIb e i e r s rb d i usd v c sae dec e i i d ti f rt ee ntde l pesago ee e c n eal o he rlva veo r od r fr n e. Ke y wor :Vx or s ha a trde i e rve veo ds W k ;c rce v c ;d i rde l pm e t n ;PCIde c ;slc u t vie ee tf nc on i
Vxworks下PCI设备驱动程序的设计与实现
Vxworks下PCI设备驱动程序的设计与实现摘要:VxWorks在嵌入式军工产品中的应用越来越广泛。
本文详细描述了在VxWorks操作系统下PCI总线驱动程序的设计与实现过程。
关键词:VxWorks PCI驱动中断1.引言VxWorks是一种运行在嵌入式设备上的高性能、可裁减性的嵌入式实时操作系统,是专门为实时嵌入式系统设计开发的操作系统,其良好的可靠性和卓越的实时性被广泛地应用在军事、航空、航天等高精尖技术及实时性要求极高的领域中。
本文详细讨论了工程实践中在VxWorks操作系统下,对基于PCI 总线设备驱动程序的设计与开发过程,具有较强的通用性。
2.系统概要本系统主要包括三种模块的驱动:开关量板驱动,A/D板驱动以及串口板驱动,其结构框图如图2-1所示:图2-1 系统结构框图系统通过这三种模块的驱动程序来完成对系统相应功能的实现。
3.程序设计开发驱动程序的首要任务就是确定访问设备的地址。
VxWorks 系统上电后POST软件会依次扫描系统中所有的PCI设备,并为它们分配相映的地址。
所以针对PC1总线结构设备的驱动程序主要开发步骤即:确定设备的PCI配置信息、确定设备的内部存储器、寄存器基地址及中断号、设备初始化、中断服务程序以及对设备的具体读写操作等。
每个PCI设备具有三种物理空间:存储器空间、1/O空间和配置空间。
配置空间是长度为256字节的一段连续的空间,其中前64字节为Header(头标),其余192字节为设备相关信息,在64字节的Header中,前16字节的定义是确定的,后48字节的具体含义因设备而异。
驱动程序首先要找到所有驱动的板卡,确定对它的访问方式是内存映射还是I/O映射,这样驱动程序就可以直接使用这些地址进行操作。
4.驱动实现VxWorks下PCI设备驱动程序实现的过程可以概括为:调用系统函数查找到相应的设备,然后查询硬件设备上的资源信息,包括内存空间基地址、I/O空间基地址、中断向量等资源,如果有中断需要挂接中断服务程序,最后实现读写操作。
基于X86架构VxWorks的设备驱动和网络通信设计
通讯技术数码世界 P .28了维护工作,由于出现故障后维修过程相对复杂,势必会造成难以估计的损失。
1.2缺乏民众的关注与支持广播电视覆盖工程的推广主要针对的是县级城市和农村,是一项比较庞大的工程,需要得到广大人民群众的关注和支持。
由于广播电视覆盖工程需要大量的资金投入,在政府出台一系列惠民政策后,受资金的制约,仍然需要广大群众自己提供一部分资金投入。
对于相对于偏远穷困的农村来说,人们不愿意把有限的经济投入到生活娱乐这项事业中去。
而对于城市用户来说,虽然这部分资金的投入不足已影响人们的生活质量,但是由于互联网的到来,人们的兴趣被新兴媒体所吸引,削弱了对广播电视的关注度和支持度,传统的广播电视事业受到很大冲击,从而阻碍了广播电视覆盖工程的工作进展。
1.3不能有效的保障工程质量无论在什么工程建设过程中,工程质量的保障工作都是整个工程的重要组成部分。
在广播电视覆盖工程建设的过程中,要想保证整个工程的质量以及工程的进展,就需要在工程的各个阶段严格把控质量。
例如:在施工过程中,工人需要根据设备需要安置的环境选择相应质量的材料进行施工;验收阶段比较复杂繁琐,工作人员需要对设备进行调试,建设方需要提供检测所需的设备,供每个台站对工程进行检测调试,最后将检测报告提交广电总局。
由于广播电视覆盖工程的验收工作非常复杂繁琐,往往在验收时,验收人员为了减少工作量,在验收过程中简单操作、敷衍了事,最后导致后期运行时出现各种各样的问题和故障,造成巨大的损失。
广播电视覆盖工程建设过程中涉及的领域非常广泛,需要各种的材料和大量的设备资源,现实生活中在利益的驱使下,建设方偷工减料,严重影响了工程的质量,在一定程度上阻碍了工程进展。
2.提出相对应的解决措施面对广播电视工程建设过程中实际存在的这些问题,我们需要提出相对应以及有效的解决措施促进问题的解决,从而有效的推动我国广播电视覆盖工程建设的进行,为广播电视事业的发展扫清障碍。
2.1高度重视维护工作设备维护与线路维护是广播电视覆盖工程建设工作中的重要组成部分,设备维护工作不仅能够提高设备运行中的可靠性,更能够很好的延长设备的使用寿命,对于广播电视覆盖工程建设来说是非常重要的方面。
基于嵌入式操作系统的VxWorks设备驱动程序设计
基于嵌入式操作系统的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下设备驱动模板
基于vxBus 的设备驱动模板vxWorks6.x 设备驱动采用了新型的vxBus 构架,该构架和原来的设备驱动有很大不同,初上手会有很多不方便。
下面提供的模板有助于快速形成一个vxBus 设备驱动设备驱动在 3 个地方体现:头文件,代码文件,hwconfig.c, 根据下面模板,把所有DEVICE 换成自己的设备,并做相应操作即可,免去很多重复代码的苦恼,开发者仅需要关注功能即可。
这个模板处理了中断,但没有提供处理基本IO 的方法,模板不是用来学习的,怎样完整地写一个vxbus 的驱动,还是需要学习的。
头文件#ifndef DEVICE_h#define DEVICE_h#define DEVICE_CARD_NAME " 设备名"#define DEVICE_CARD_DESC " 设备描述"#define DEVICE_CARD_VXBNAME " 设备vxBus 名"#define DEVICE_CARD_INT_PIN [ 中断管脚]#define DEVICE_CARD_INT_CORE_PIN [ 核中断管脚]#define DEVICE_CARD_INT_CORE_NUM [ 中断处理核]#define DEVICE_INT_DESC {DEVICE_INT_PIN,DEVICE_CARD_VXBNAME,0,0}#define DEVICE_XBAR_DESC {DEVICE_INT_PIN,DEVICE_INT_CORE_PIN} #define DEVICE_ROUTE_DESC {DEVICE_INT_PIN,DEVICE_INT_CORE_NUM} #define DEVICE_UNIT0_DEVICE_ID 0/* 假如有多个同型号设备begin*/#define DEVICE_UNIT1_DEVICE_ID 1 /* 假如有多个同型号设备end*//* 其他设备宏*/#endif/*DEVICE_h*/代码文件#include <vxWorks.h>/*added for vxBus*/#include <vxBusLib.h>#include <hwif/vxbus/vxBus.h> #include <hwif/vxbus/vxbPlbLib.h>#include <hwif/vxbus/hwConf.h>#include "DEVICE.h"/* 其他必要的INCLUDE*//* 设备数据结构 */ typedef struct {VXB_DEVICE_ID pDev;int nVxUnit;/* 其他需要的成员变量 */} DEVICE_STRUCT;/* 总线加载函数 */LOCAL void DEVICEInstInit (struct vxbDev * pDev);LOCAL void DEVICEInstInit2(struct vxbDev * pDev);LOCAL void DEVICEInstConnect(struct vxbDev * pDev); /* 方法函数 (假如有的话 )*/ /* 探寻函数 */LOCAL BOOL DEVICEProbe(struct vxbDev * pDev);/* 中断响应函数 */LOCAL void DEVICEInt(DEVICE_STRUCT * pDrvCtrl);/*vxBus 注册总线加载函数 */LOCAL struct drvBusFuncs DEVICEFuncs = {DEVICEInstInit,DEVICEInstInit2,DEVICEInstConnect};/*vxBus 设备方法函数 */ LOCAL device_method_t DEVICEMethods[] ={/* 方法函数 (假如有的话 )*/{0, 0}};/*PCI 设备需要填写 */LOCAL struct vxbPciID DEVICEDevIDList[] ={{ DEVICE_DEVID, DEVICE_VENDORID }};/*vxBus 设备注册入口 *//*pci 设备 start*/LOCAL struct vxbPciRegister DEVICERegistration = {{NULL, VXB_DEVID_DEVICE,VXB_BUSID_PCI,VXBUS_VERSION_4,DEVICE_CARD_VXBNAME, /* 设备名称 *//* devInstanceInit */ /* devInstanceInit2 *//* pNext */ /* devID */ /* busID = PCI */&DEVICEFuncs, DEVICEMethods, DEVICEProbe},NELEMENTS(DEVICEDevIDList),DEVICEDevIDList };/*pci 设备 end*//*plb 设备 start*/LOCAL struct vxbPlbRegister DEVICERegistration = {{}};/*plb 设备 end*/ /*************************************************************************/ void DEVICERegister(void){vxbDevRegister((struct vxbDevRegInfo *)&(DEVICERegistration)); return; /************************************* ************************************/ LOCAL void DEVICEInstInit (struct vxbDev * pDev){vxbNextUnitGet(pDev);return;}/* 设备初始化 */LOCAL void DEVICEInstInit2(struct vxbDev * pDev){DEVICE_STRUCT *pDrvCtrl; pDrvCtrl = malloc(sizeof(DEVICE_STRUCT)); if(pDrvCtrl == NULL) return;bzero ((char *)pDrvCtrl, sizeof(DEVICE_STRUCT)); pDev->pDrvCtrl =pDrvCtrl; pDrvCtrl->pDev = pDev;/* 下面添加硬件要求的代码 */return;}/* 设备探寻 */LOCAL BOOL DEVICEProbe(struct vxbDev * pDev){/*PLB 标准写法 start*/BOOL retVal = TRUE;if (pDev->busID == VXB_BUSID_PLB){retVal = TRUE;}NULL, VXB_DEVID_DEVICE, VXB_BUSID_PLB, VXBUS_VERSION_4, DEVICE_CARD_VXBNAME, &DEVICEFuncs, DEVICEMethods, DEVICEProbe /* pNext, 一般都用 NULL *//* devID, 固定,表示这是一个设备 */ /* busID = PLB , 表示这个设备挂接在 /* 版本号 ,6.7 为版本 4 *//* 设备名称 ,必须和 hwconfig.c 中统一 */ /* pDrvBusFuncs, 设备总线函数组在后面定义 /* pMethods , 设备方法组 ,在后面定义 *//* devProbe , 设备探测 */PLB 上*/ */else{retVal = FALSE;} return(retVal);/*PLB 标准写法end*//*PCI 写法start*/UINT16 venId;UINT16 devId;/* 子设备ID 及硬件版本,假如有的话*//* UINT16 subDevId;UINT32 hwRev;*/int i;DEVICE_STRUCT *pDrvCtrl;pDrvCtrl = pCev->pDrvCtrl;VXB_PCI_BUS_CFG_READ (pDev, PCI_CFG_VENDOR_ID, 2, &venId);VXB_PCI_BUS_CFG_READ (pDev, PCI_CFG_DEVICE_ID, 2, &devId);/*查询Bar,并填写到结构里面*/for (i = 0; i < VXB_MAXBARS; i++){/* 根据需要填写*/}if (填写过程中有错误) return (FALSE);if ((devId != DEVICE_DEVID) &&(venId !=DEVICE_VENDORID)){printf("cannot find the DEVICE device\r\n"); return (FALSE);}return (TRUE);/*PCI 写法end*/}/* 挂接中断*/LOCAL void DEVICEInstConnect(struct vxbDev * pDev){/* 禁用中断*/ DEVICEIntDisable(pDev->pDrvCtrl);/* 清中断*/ DEVICEIntClear(pDev->pDrvCtrl);/* 挂接中断*/ if(vxbIntConnect(pDev,0,DEVICEInt,(void *)(pDev->pDrvCtrl)) != OK) {printf("DEVICE: vxbIntConnect Fail\n"); } else{ printf("DEVICE: vxbIntConnect OK\n");} if(vxbIntEnable(pDev,0,DEVICEInt,(void *)(pDev->pDrvCtrl)) != OK) { printf("DEVICE: vxbIntEnable Fail\n"); } else{ printf("DEVICE: vxbIntEnable OK\n");}/* 使能中断*/ DEVICEIntEnable(pDev->pDrvCtrl);}/* 中断响应函数*/LOCAL void DEVICEInt(DEVICE_STRUCT * pDrvCtrl) {int n;int lockId;n = pDrvCtrl->nVxUnit; lockId=intCpuLock();/* 探寻本设备中断源*//* 处理中断*//* 清除本设备中断源*/ DEVICEIntClear(pDrvCtrl); intCpuUnlock(lockId); }/* 中断控制函数*/LOCAL void DeviceIntEnable DEVICE_STRUCT * pDrvCtrl) {}LOCAL void DeviceIntDisable(DEVICE_STRUCT * pDrvCtrl){}LOCAL void DeviceIntClear(DEVICE_STRUCT * pDrvCtrl){}Hwconfig.c#include "DEVICE.h" const struct hcfResource DEVICEResources[] = {{ "deviceId", HCF_RES_INT, { (void *)(DEVICE_UNIT0_DEVICE_ID) } }, /* 下面写需要的资源*/};#defineDeviceNum NELEMENTS(DEVICEResources) /* 设置中断路由,放到合适的位置上*/ DEVICE_INT_DESC ,DEVICE_XBAR_DESC ,DEVICE_ROUTE_DESC ,in const struct hcfDevice hcfDeviceList[] = {{DEVICE_CARD_VXBNAME,DEVICE_UNIT0_DEVICE_ID,VXB_BUSID_PLB/*PCI*/,0,DEVICENum,DEVICEResources},}。
Vxworks嵌入式操作系统下网络设备驱动程序设计
Vxworks嵌入式操作系统下网络设备驱动程序设计Vxworks嵌入式操作系统下网络设备驱动程序设计作者Email:******************摘要:本文主要介绍在Vxworks操作系统下网络设备驱动程序设计、调试方法以及将其加入系统内核的配置方法。
关键词:Vxworks 嵌入式操作系统网络设备引言VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。
良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。
它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
1 嵌入式系统嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。
和通用计算机不同,嵌入式系统是针对具体应用的专用系统,目的就是要把一切变得更简单、更方便、更普遍、更适用;它的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能。
嵌入式系统主要由嵌入式处理器、外围硬件设备、嵌入式操作系统以及特定的应用程序等四部分组成,是集软硬件于一体的可独立工作的“器件”;用于实现对其它设备的控制、监视或管理等功能。
嵌入式系统应具有的特点是:要求高可靠性;在恶劣的环境或突然断电的情况下,要求系统仍然能够正常工作;许多嵌入式应用要求实时处理能力,这就要求嵌入式操作系统(EOS)具有实时处理能力;嵌入式系统中的软件代码要求高质量、高可靠性,一般都固化在只读存储器中或闪存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。
2 设备驱动程序Vxworks5.4中驱动程序主要分为三种:字符、块以及网络驱动程序。
vxWorks设备驱动开发指南(2)
vxWorks设备驱动开发指南(2)vxWroks 6.8设备驱动开发指南――写具体类设备驱动3 DMA驱动3.1 简介本章描述了DMA驱动。
3.2 概要有些硬件设计包括一个通用DMA引擎,处理来自DMA的访问,或到外部设备,或从内存到内存。
这些DMA引擎通常集成在片上CPU系统中。
DMA驱动类为系统中其它设备提供DMA引擎服务的一套标准方法。
提供的vxbDmaLib库提供用于DMA引擎。
这个DMA库提供的函数是vxbDmaChanAlloc( )和vxbDmaChanFree( )。
3.3 VxBus驱动方法由vxbDmaLib库提供的函数充分使用三个VxBus驱动方法:■?{vxbDmaResourceGet}( ) {vxbDmaResourceRelease}( ) {vxbDmaResDedicatedGet}( )■?■?DMA驱动通过这些方法的关联函数提供对它们服务的访问。
3.3.1 {vxbDmaResourceGet}( ){vxbDmaResourceGet}( )方法用于DMA库来分配一个DMA驱动管理的设备上的DMA通道。
原型如下:STATUS {vxbDmaResourceGet} (VXB_DEVICE_ID pInst, VXB_DEVICE_ID pReqDev, VXB_DMA_REQUEST * pReq )这个原型,pInst指DAM设备本身,pReqDev指请求一个DMA通道的设备,和pReq是一个指针,指向一个结构,描述DMA通道的期望的属性。
VXB_DMA_REQUEST结构定义在:installDir/vxworks-6.x/target/src/hwif/h/util/vxbDmaDriverLib.h 结构定义如下:typedef struct vxbDmaRequest {VXB_DEVICE_ID instance; /* DMA requestor device id */ UINT32 minQueueDepth; /* minimum queue depth requested */UINT32 flags; /* flags used during DMA allocation */VXB_DMA_RESOURCE_ID pChan; /* DMA channel id */ void * pDedicatedChanInfo; /* dedicated channel information */ } VXB_DMA_REQUEST;这个结构很大程度上对应传递给vxbDmaChanAlloc( )的参数。
嵌入式VxWorks系统下的CPCI设备驱动程序开发
Ab ta t Fis l ,t ePCI o fg r to p c r h t c u e a d a d e sm a p n r n l z d,a d t e src r ty h n iu a in s a e a c i t r n d r s p i g a ea ay e c e n h n,a c r ig t c o d n o a
数 据 采 集 处 理 系 统 的工 程 实 例 , 细 阐述 了 Vx ok 下 C C 设 备 驱 动 程 序 的开 发 实 现 方 法 和 具 体 步 骤 , 给 出 了 部 分 关 详 W rs P I 并 键 代 码 。应 用 结 果 表 明 , 方 法 可 移 植 性 较 高 , 操 作 性 强 , 于 了 解 和 开 发 C C 驱 动程 序具 有 一 定 的 参 考 价 值 。 该 可 对 PI
和处 理系统 , P C U模 块 是 x 6体 系 结 构 , 统 中的 8 系 几 块数 据 采 集 板 卡 和 信 号 产 生 模 块 都 基 于 C C P I
总线 , 使用 P I0 4接 口芯片作 为 P I C 95 C 总线 和本 地 总线通 信 的介 质 。Vx r s 作 系统 专 门对 P I ok 操 C 设 备提 供支 持 , 包括对 P I C 总线 的底层 操作 函数 。
Ke o ds Vx o k ,C yW r W r s PCI 0 4 e ie d ie ,9 5 ,d v c rv r Cls m b r TP 3 a s Nu e 34
1 引 言
Vx r s Wok 是一 款微 内核 高性 能 可 裁 剪 的嵌 入 式 实时操作 系统 , 以其 卓 越 的实 时性 和 良好 的可 它
VxWorks下驱动程序的设计与实现
使 得 开 发 者 只需 做 最少 的工 作 即可 设 计 出有 效 的 、适 合 于 不 同 用 户 要求 的 系统 在 开 发 B P时 . 仅 要 对 B P专 用 的 驱 动 程 S 不 S 序 提 供完 全 的支 持 . 需 要 将 通 用 的 设 备 驱动 程序 集 成 在一 起 还 因 此 . 编 写设 备 驱 动 程 序 的 实 现 时 . 以根 据 具 体 情 况 将其 放 在 可 在 B P中 合适 的位 置 S
化 。在 V Wo s .S 向 V Wok 提 供与 硬 件 环 境 的接 口. x r 中 BP k x rs 负 责 完成 加 电时 的 硬 件初 始 化 .为 V Wok 访 问硬 件 驱 动 程 序 提 x rs 供 支 持 .将 V Wok 中 与硬 件 有 关 以 及 与硬 件 无 关 的 软 件进 行 x rs 集 成 。 B P中 , 括 了源 代 码 、 文 件 、 k 在 S 包 头 Ma e文 件 、 生 文件 以 派 及 二 进 制 驱 动程 序 模 块 。但 B P并 不 是 硬 件 驱 动 程 序 。 在 V . S x
V Wo 是 由 Wid R v r y t 公 司 开 发 的 一 套 具 有 微 x  ̄s n i s ms eS e 内核、 高性 能 、 可伸 缩 的实 时 操作 系统 , 持众 多 的 网 络协 议 . 支 用 户 可 以根 据 自己 的 需要 来 组 合 .其 开放 式 的结 构 和 对 工 业 标 准 的 支 持使 开 发 者 只 需 要 做 少 量 的 工 作 就 可 以设 计 出 有 效 的 、 适 用 于不 同 用 户 的 系统 V Wok x rs由 以下 几个 系统 组 成 : ( ) 性能 的实 时 操 作 系统 核 心 w n 。 1高 id ( ) O系 统 。V Wok 提供 了一 个 能 快 速 、 活 地 与 A S 2I / x rs 灵 NI C兼 容 的 I 系统 . 括 U I / O 包 N X标 准 的缓 冲 I / O和 P SX标 准 的 OI 异步 I / O。V Wo 包 括 以 下驱 动程 序 : 络 驱 动 、 道 驱 动 、 x As 网 管 键 盘 驱 动 、 示驱 动 、 盘 驱动 、 口驱 动 等 。 显 磁 并 ( 本 地 文 件 系 统 3)
VxWorks操作系统下FPGA设备驱动程序实现
I pl m e a i n o m e nt to f FPGA i e s d o W o k e a i n S s e Dr v r Ba e n Vx r s Op r to y t m
项
(. 江 工 程 职 业 技 术 学 院 , 汉 1长 武
伟 韩 礼红 ,
4 0 1 ;. 州交 通大 学 , 州 3222兰 兰 707) 3 00
摘
要 : 要 介 绍 了 Vx rs 作 系 统 的体 系结 构 以及 基 于 AT 1 M9 0 发 板 下 F G 硬 件 的 实 现 原 理 。在 简 wok 操 9 R 20开 PA
发成 为 可 能 。 本 文 给 出 了 Vx ok W rs下 实 现 F GA 基 于 P
Ab ta t sr c :Th t u t r f Vx o k p r t n s s e a d i lm e t to f F GA a d r e s r c u e o W r s o e a i y t m n mp e n a i n o P o h r wa e b sdo a e n AT9 9 0 r n r d c d b ify,a d t e d v l p e to GA n r i g p o 1 RM 2 0 we e i t o u e re l n h e eo m n fFP a ddi n r — v
接收则使用中断方式以提高响应速度采用fifo接收缓冲区isr在接收中断服务程序中轮询6个bank对应接收中断寄存器如果该寄存器为1说明接收刭数据帧则把接收到的数据帧存放在该baill对应fifo接收缓冲区并清除接收中断寄存器
VxWorks下字符设备的驱动开发
Computer Knowledge and Technology 电脑知识与技术第7卷第1期(2011年1月)VxWorks 下字符设备的驱动开发郭德磊(中国飞行试验研究院,陕西西安710089)摘要:随着VxWorks 操作系统在嵌入式系统中的应用,VxWorks 下产品的开发和应用也越来越广泛。
开发嵌入式设备经常遇到的一个问题就是如何编写高效可靠的设备驱动程序。
该文对VxWorks 下设备驱动程序开发的几个主要方面以及如何配置PCI 总线设备等进行了详细介绍,为相关的开发人员提供了很好的参考。
关键词:VxWorks ;字符设备;驱动开发;PCI 设备;select 功能中图分类号:TP311文献标识码:A 文章编号:1009-3044(2011)01-0121-02VxWorks Device Driver Development Under the CharacterGUO De-lei(China Flight Test Establishment,Xi'an 710089,China)Abstract:With the VxWorks operating system in embedded system,VxWorks under the product development and applications are in -creasingly widespread.Development of embedded devices is a problem often encountered in how to write efficient and reliable device drivers.In this paper,VxWorks device driver development under the main aspects and how to configure the PCI bus devices are described in detail for the relevant developers a good reference.Key words:VxWorks;character device;driver development;PCI device;select functionVxWorks 是一个基于抢占式的实时操作系统,它以其高度的可靠性、优秀的实时性、灵活的可裁性广泛应用到越来越多的嵌入式装置中。
VxWorks IO设备驱动
Chaper09—IO设备驱动设计概述字符型设备驱动块设备驱动Select机制IO设备驱动的作用为了提供应用程序的可移植性将应用程序从直接的操作设备的繁琐细节中解放出来操作系统应该为应用程序操作设备提供一个一致的接口。
这个一致的接口就是由操作系统的I/O系统提供的。
I/O系统将应用程序的请求传递给设备专用的I/O函数. 这些设备专用的I/O函数就是由设备驱动程序提供的。
为了对设备进行有效的管理操作系统通常还要具有一些内部的数据结构。
字符型设备驱动三个与驱动程序有关的表:为了对设备进行有效的管理操作,系统通常还要具有一些内部的数据结构。
对于VxWorks 而言这些内部结构包括文件描述符表、设备链表和驱动程序表。
七个标准的IO操作函数驱动程序设计IO设备访问过程驱动程序表驱动程序表中包含每个设备专用的I/O 调用函数, 驱动程序表是I/O 系统访问driver 的入口点,是I/O 系统中十分重要的数据结构。
它的大小通常是固定的,包括相同的例程creat( )和open( )。
它将vxworks 提供的标准例程(如open)和用户编写的设备驱动程序(myOpen)关联起来。
可以使用iosDrvShow( )来显示Driver 表。
设备链表设备列表是由设备描述符组成的链表。
每个设备有一个相应的设备描述符。
描述符是由与驱动程序无关的部分和与驱动程序相关的部分组成。
与驱动程序无关的部分是称为设备头的数据结构。
它包含指向前后设备描述符(DEV_HDR)的指针设备名以及设备专用函数在系统驱动程序表中的I/O索引等。
与驱动程序有关的部分包含驱动程序专用的数据。
I/O系统中open( )、creat( )和delete( )三个例程使用设备链表去匹配一个设备名。
该链表是双向链表结构,在链表上的项目数是动态的。
文件描述表文件表描述符表用于管理文件和设备,是由文件描述符组成。
对于每一个打开的文件或设备都有一个文件描述符。
VxWorks下多PCI设备的驱动设计与实现
操作性和卓越的实时性被广泛地应用在通信、 军事、 航 空 、 天等 高精尖 技术 及实 时性要求 极高 的领域 中。 航 PI C 总线是一种 即插 即用的总线 , BO 和操作 在 IS 系统的支持下 , 能够 自动地为设备分配合适 的内存 映
射地址 、 O端 口和系统 中断控 制器 的输入 (R 。 I / IQ) 在嵌 入 式 系 统 中 , 件 系统 的 设 计 经 常 会 用 到 硬
i ebadsp o akg B P r i steV Wok t a cest h rw r.T eds n nt or p  ̄pc ae( S )po d h x rsw h n acs o ad ae h ei h u ve i g
a d i l me tto ft e d i e o lil — e ie n t W o k r e n tae n d ti. n mp e n ain o h rv rfrmu t e PCId vc s i heVx r sa e d mo sr td i eal p Ke wo d y r s:Vx o k pe ai g s se ;BS W r s o r tn y t m P;d ie ;mu tp e PCI rv r li l
收 稿 日期 :0 00 —1 21- 1 5
作者简介 : 陆峻 , ,96年生 , 女 17 高级工 程师 , 从事雷达终端及指控技术研究 。
----— —
6 ・— 4 - - ・ —
陆
峻
等
V Wok 下 多 P I x rs C 设备 的驱动设 计 与实 现
种 方法 配置 P I 备 都需 要考 虑此 内存 映射 表 。 C设
T e d sg n mp e n ai n o rv rf r h e in a d i l me t t fd ie o o
VxWorks内核、设备驱动与BSP开发详解(附光盘)
VxWorks内核、设备驱动与 BSP开发详解张杨于银涛编著人民邮电出版社北京内容提要在嵌入式行业飞速发展的今天,嵌入式操作系统的应用越来越广泛,VxWorks具有良好的实时性,被大量应用于航空、通信、国防、工业控制、网络设备、医疗设备、消费电子等嵌入式实时应用领域。
本书共24章,按照初学者学习的一般步骤,详细介绍了VxWorks的开发环境、内核分析和应用程序开发、驱动程序开发与原理和板级支持包流程与移植,每章均配以实例进行讲解。
本书语言通俗、实例丰富、代码分析详尽,有较强的实用性和参考价值,适合大专院校嵌入式相关专业学生学习参考,也可供嵌入式开发人员和系统设计人员参考使用。
VxWorks内核、设备驱动与BSP开发详解♦编著张杨于银涛责任编辑黄焱审校华清远见嵌入式培训中心♦人民邮电出版社出版发行北京市崇文区夕照寺街14号邮编 100061 电子函件 315@网址 三河市海波印务有限公司印刷♦开本:800×1000 1/16印张:24.75字数:520千字2009年10月第1版印数:1 – 3 000册2009年10月北京第1次印刷ISBN 978-7-115-21292-4定价:49.00元(附光盘)读者服务热线:(010)67132692 印装质量热线:(010)67129223前 言行业背景嵌入式系统应用已经深入到我们生活中的各个领域,手机、机顶盒、MP4、交换机、路由器等都可以归结为嵌入式设备。
在这些嵌入式设备中,有一部分设备需要功能强大、实时性强的操作系统,VxWorks正是这类操作系统中的佼佼者。
从VxWorks 5.4 进入中国以来,已经过去了十多年,VxWorks在国内的应用不但没有减少,反而呈现了面向架构多、应用范围广、民用化的特性,越来越多的嵌入式设备转而采用VxWorks实现。
关于本书随着VxWorks应用逐渐广泛,相关书籍却不多。
本书结合作者在VxWorks的多年工作经验,仔细描述了实际开发过程中可能遇到的一些问题,并深入分析VxWorks系统的工作机制,旨在希望能够给刚接触VxWorks的初学者及对VxWorks有一定了解的朋友提供一些帮助,为熟悉VxWorks的朋友提供分析问题、设计软件的途径和思路。
第十一章:vxWorks的设备驱动开发(2)
2010-12-29
1
11.1 命名设备驱动(CHAR) 命名设备驱动(CHAR)
设备驱动描述 设备驱动管理 设备驱动设计
2010-12-29
2
设备驱动描述
由于操作系统的IO管理通过设备列表管理方式维护和 由于操作系统的IO管理通过设备列表管理方式维护和 调用特定设备驱动实现设备管理,因此通过用特定的字 符串名称描述设备,同时按照IO系统的要求设计功能 符串名称描述设备,同时按照IO系统的要求设计功能 函数,以命名方式保证操作系统管理实现。 对大部分的端口设备或数据流设备都可以遵循CHAR设 对大部分的端口设备或数据流设备都可以遵循CHAR设 CHAR 备驱动的设计方式 在实时要求受限或者硬件过于简单情况下可以考虑API 在实时要求受限或者硬件过于简单情况下可以考虑API
static SIO_DRV_FUNCS fooSioDrvFuncs = { fooIoctl,fooTxStartup,fooCallbackInstall,fooPollInput,fooPollOutput }; void fooDevInit (FOO_DRV * pFooDrv) { /* initialize driver function pointers */ pFooDrv->portA.pDrvFuncs = &fooSioDrvFuncs; /* install dummy driver callbacks */ pFooDrv->portA.getTxChar = fooDummy; pFooDrv->portA.putRcvChar = fooDummy; … }
11 vxWorks的设备驱动开发(2) vxWorks的设备驱动开发 的设备驱动开发(
实时操作系统VxWorks下驱动程序的设计
信号/数据处理实时操作系统Vx Works下驱动程序的设计3周雪峰(南京电子技术研究所, 南京210013)【摘要】 介绍了Vx Works下标准I/O设备的驱动及其机理,详细说明了在实时多任务操作系统下配置PC I总线的方法。
然后以PC I设备为例,使用任务结合中断服务的方式,完成了非标准接口设备的驱动开发。
最后,阐述了实时操作系统下内存映射、DMA数据传输、中断处理和高速缓存一致性的使用方法。
【关键词】 设备驱动;中断处理;高速缓存一致性中图分类号:T N957 文献标识码:AD esi gn of D ev i ce D r i vers Ba sed on Rea l2ti m eO pera ti on Syste m Vx W orksZ HOU Xue2feng(Nanjing Research I nstitute of Electr onics Technol ogy, Nanjing210013,China)【Abstract】 The driver of a standard Vx Works I/O device as well as its working p rinci p le are intr oduced in this paper,and configurati on techniques of PC I bus in real2ti m e multitask oporating syste m are illustrated.Then take PC I device as exa mp le,a non2standard interface device driver is i m p le mented by combining tasks and interrup t service.Finally,me mory mapp ing,DMA da2 ta transfer interrup t handling and cache coherency issues in real2ti m e operating syste m design are described in detail.【Key words】 device drivers;interrup t handling;cache coherency0 引 言Vx Works嵌入式实时操作系统RT OS(Real Ti m e Operating Syste m)在军用电子通信等领域得到了广泛应用,在新型雷达的开发中需要根据相关需求定制特定的计算机外设,而第三方供应商一般只能提供W in2 dows桌面操作系统下的驱动程序,因此诸如显卡、雷达数据采集卡和网络通信板等在Vx Works下的驱动开发就显得尤为迫切。
VxWorks下驱动程序设计
收稿 日期 : 0 91 - 2 0 —11 5
基金项 目:陕西省 自然科学基础研究计 划项 目“ 功耗 N C的核心技 术研究 ” 编号 :0 7 2 ) 微 电子预研 专项项 目 低 O ( 20 F 1 ;
( 编号 :100 0 11 ; 电子预研重点基金项 目( 5 38 150 ) 微 编号 :10 6 17 6 ) 94 A10 00 1 作者简介 : 强新建 (99 ) 男 , 16 一 , 讲师 , 学士 , 主要从事嵌 入式 开发 与应用研究.
文章 编号 :630 4 21 )30 8-3 17 -6 X(0 0 0 - 20 0
V W ok 下 驱 动 程 序 设 计 x rs
强新建 田泽 , , 淮治华
(. 1西安石油大学 计算机学院 , 陕西 西安 7 0 6 ; . 10 5 2 中国航空计算技术研 究所 , 陕西 西安 7 0 6 ) 10 8
如 图 2所 示 ,re F T u F S由核 心 层 ( oeL yr 和 C r ae )
3个 功 能层 , 即翻 译 层 ( r s t n L yr , T 层 Ta l i a e) M D n ao
摘 要 : x rs V Wok 下设备 驱动程 序 的设计 一直是 嵌入 式 系统 应 用 中的 热点. 绍 了 V Wok 介 x rs下标 准设 备 驱 动及其 原理 , 阐述 了驱动 程序 的开发 流程 , 出 了在 Fah上 实现 Tu F S的具 体 方法 , 给 ls re F 包括驱
等方 而考 虑 , 广泛 应用定 制硬 件 , 样就要 求用 户 自 这
雾囤謇
l l l I
己开发硬件的驱动程序. 设备驱动本身与操作系统 的相关 性特别 密切 , 因此 驱 动 程序 开 发 不仅 要 求 开 发者对 操作 系统有 深 入 的 了解 , 要 对 硬 件体 系 具 还
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3,打开设备函数 打开操作通常会执行一些设备的初始化或者适当 的设置。如果成功执行,那么就会返回设备的标识。 4,设备读写函数 设备的读操作和写操作是两个相反的过程,一个 是向设备发送数据,一个是从设备接收数据。 5,IO控制函数 为了适应不同的设备,VxWorks的IO系统还提供 了这个接口,用户可以通过这个接口实现与设备相关 的其它功能。
P64页图
1,设备列表 设备列表是一个双向链表。每当添加设备时,系 统都会向列表中添加新的环节。 2,驱动程序描述表 VxWorks的IO系统通过这个表存储驱动程序各个 函数的入口点。在系统中安装的所有驱动程序都会在 这个表中有相应的入口点。 3,文件描述表 文件描述符表是IO系统将文件描述符与驱动程序, 设备对应起来的手段。
设备驱动程序是直接控制设备操作的那部分程序, 也是设备上层的一个软件接口。设备驱动程序的功能 是对IO进行操作,实际上从软件角度来说就是对IO端 口地址进行读写操作。 只要系统访问设备就会调用驱动。驱动程序不能 自动执行,只能被系统或应用程序调用。
设备分为如下几类: 字符设备,大多数的传输设备以及显示终端。 随机存储块设备,这种设备主要是指磁盘。 虚拟设备,比如管道,套接字都属于这种设备。 控制见识设备,一般是指用于控制数模变换的IO 设备。 网络设备,那些与网络协议挂接的通信设备。
6,关闭设备函数 关闭操作时打开操作的逆过程,在关闭操作中, 应该释放那些在打开操作中申请的内存,信号量,消 息队列等。 7,VxWorks系统中支持设备驱动程序的其他函 数 包括卸载设备函数,卸载设备驱动函数,获取设 备描述符,文件描述符转换成设备ID等函数。
串行设备与字符型设备的不同之处是,串行设备 的驱动程序并不是直接挂在IO系统中,而是由虚拟设 备ttyDrv来使用。它既可以工作在中断模式下,又可 以在轮询模式下工作。
中断号与中断向量的转换: 嵌入式系统给每种中断都安排一个中断号。每种 类型的中断都由对应的中断服务程序来处理,而中断 向量表用来存放终端服务程序的入口地址。
安装终端服务程序: 用户可以用指定的程序替代VxWorks中的中断服 务程序。VxWorks提供了intConnect()函数实现这个 功能。 安装中断服务程序的函数intConnect原型如下:
通过上图可以看出,字符设备驱动程序主要由7 个函数完成驱动程序与系统的衔接,即: xxDrv():驱动程序安装函数; xxDevCreate():设备创建函数; xxOpen():打开函数; xxClose():关闭函数; xxRead():读函数; xxWrite():写函数; xxIoctl():IO控制函数。
操作系统通常提供了给设备命名的功能,系统可 以调用相关的系统服务给设备注册一个名字。应用程 序可以根据这个名字获得对应设备的主从设备号以及 对设备进行打开,关闭,读,写等操作。 下面是一个注册设备名的函数示例。
status xx_io_register_name(char *name,int major,int minor); Major 主设备号;minor 从设备号
工具/应用程序 I/O系统 文件系统 VxWorks函数库 TCP/IP 路由协议 MUX
与硬件无关的软件 与硬件相关的软件 Wind内核
SCSI驱动程序
BSP
网卡驱动程序
SCSI控制器
串行控制芯o环境下,成功安装BSP开发包之后, 可以在../target/src/drv目录下找到一些设备驱动程 序源代码文件。 配置这些VxWorks自带驱动程序,只需要在 config.h文件中,添加这些设备驱动程序的宏定义就 行。
在VxWorks中,IO系统提供了与设备无关的用户 接口,应用程序可以通过标准的接口(open(),creat(), read(),write(),ioctl(),close(),close(), remove())访问设备驱动程序。 由于IO系统提供了与用户无关的应用程序接口。 标准的接口提供了与系统相关的标准IO功能。应用程 序在以相同的接口访问多种设备或者需要使用系统相 关的IO功能时就应该使用标准接口来设计设备驱动程 序。 如果设备不需要那些IO系统所提供的系统相关功 能时,就不应该使用标准用户接口。
对于这种机制的设备寄存器,系统通过特殊的总 线周期来访问它,但体系结构必须提供控制线,通常 需要汇编语言支持,并且需要特殊的存取指令。因为 这种机制下处理器使用独立的IO地址空间,而C语言 没有提供一种用来表明一个地址是存储地址还是IO地 址的方法,所以需要特殊的汇编指令来访问IO地址空 间的数据。 可以使用汇编语言编写访问IO地址空间数据的全 局函数。然后在C代码中条用这些函数来访问设备寄 存器,这样便可以非常容易地操作映射到IO空间的设 备。
(1)对设备进行初始化。初始化的目的是使设 备处于某种工作状态,以便用户程序访问该设备。譬 如串口初始化包括设置串口波特率,数据位,奇偶校 验位,停止位等。 (2)打开设备操作。打开设备操作实际上是查 询用户指定的设备,并查看用户是否可以使用该设备。 因为设备时共享资源,当设备正在使用时,系统要对 它进行保护,禁止其他任务对设备进行操作,直到设 备资源被释放。
STATUS intConnect(VOIDFUNCPTR *vector,VOIDFUNCPTR routine,int parameter);
该函数参数为:需要与服务程序关联的中断向量, 需要连接的C函数的地址以及传递给该函数的一个参 数。
在IO机制中,分存储映射IO机制和端口IO机制。
在这种机制中设备的寄存器与存储区仅仅通过地 址来区分,因为系统将设备寄存器映射到系统的存储 空间区。在这种IO机制中用C语言访问设备的寄存器 就像访问存储区一样方便。
中断服务程序: 中断服务程序是用户定义的一个程序,只有当中 断产生时它才执行,该程序独立于任务的上下文。
中断处理的过程如下: (1)当设备产生中断请求时,中断当前任务并取中 断类型号; (2)在中断应答期间,系统决定哪个设备需要服务 (计算中断向量地址); (3)为设备调用适当的函数(设备注册的设备中断 服务程序); (4)在VxWorks定义的中断包裹函数里,保存寄存 器的值及调用用户定义的中断服务程序; (5)中断处理结束后,从中断服务程序返回并恢复 寄存器的值; (6)如果执行中断服务程序后,没有高优先级的任 务运行,则恢复被中断任务的执行。
3,tyWrite()和tyRead() 这两个函数都控制着一个缓冲区。调用时,都通 过缓冲区进行设备的读写。 4,ttyloctl()函数 ttyIoctl()函数相应IO系统ioctl()的调用,这个函 数首先访问时机驱动程序所提供的xxIoctl()函数,如 果所需功能在其中没有提供,ttyIoctl()函数还会继续 调用tyIoctl()函数。
1,驱动程序安装函数 驱动程序安装函数的目的是将驱动程序的各个函 数入口点添加到系统的驱动程序表中,提供给IO系统 访问。它要完成以下的工作: 将驱动程序入口点添加到系统的驱动程序表中; 做一些必要的初始化。
2,设备创建函数 安装完驱动程序后就执行设备创建函数,其过程 如下: 判断驱动程序是否已经安装,如果未安装则应返回 错误并且设置错误号; 为设备描述符分配空间并将其初始化; 将设备添加到系统设备列表中; 执行一些设备相关的初始化代码。
VxWorks下设备驱动程序通常要调用一些基本的 函数,对设备进行安装,卸载,读,写,控制等操作。
设备驱动程序是控制硬件运转的软件解决方案。 当硬件发生时间或状态改变时,软件必须知道这些情 况以便应用程序可以做出相应反应。 设备驱动程序通常采用两种方式来获得这些状态 的改变或事件的发生: (1)轮询方式 (2)中断处理方式
优点:所编写的应用程序移植性好(统一的标准 接口函数),且设备由操作系统管理,适合复杂的嵌 入式系统。 缺点:操作系统管理设备,增加了系统开销。
扩展模块是嵌入式操作系统可供用户选择的模块。 当用户需要某个扩展模块时才把该模块加入到操作系 统中,如网络模块,文件模块等。它的优点类似于第 二种调用方式,但这些扩展模块依赖于操作系统内核。
(5)把数据从主机上发送给设备。这项功能对 应通常的写操作,把主机上的数据传送给外界。通常 系统主动调用该操作进行数据发送,有时也采取中断 方式发送数据。 (6)对设备进行控制操作。在使用设备过程中, 有时根据应用的需要对设备进行控制,而控制操作就 能提供这种功能。
应用程序对设备进行操作是通过操作系统的IO管 理子系统来进行的。而IO管理子系统对设备的管理在 系统中是通过一张表来操作,通常把这张表成为“设 备驱动程序表”。设备驱动程序表实际上是一个数组, 它的每一个数组项是一个设备驱动程序地址表结构体, 这个结构体包含初始化,打开,关闭,读写,控制等 操作函数的入口地址。如果哪一个操作函数空缺,那 么它的入口地址是NULL。
在嵌入式系统中调用设备驱动通常有三种方式: 应用程序直接调用,应用程序通过操作系统内核调用, 应用程序通过操作系统的扩展模块进行调用。 不同的调用方式各有自己的优缺点,下面分别描 述他们的优缺点:
优点:可以高效访问设备(因为绕过操作系统, 而直接访问设备,减少了系统开销时间),减少了系 统代码开销,适合简单的嵌入式系统。 缺点:所编写的应用程序移植性差(因为应用程 序直接与设备驱动相关联),且用户自己来管理设备, 不适合复杂的嵌入式系统。
(3)关闭设备操作。关闭设备操作就是释放设 备资源。任务对设备完成操作之后,必须进行关闭设 备操作,否则设备总是处于被占用状态,其他任务无 法使用。与打开设备操作相对应,有打开操作就有关 闭操作。 (4)从设备上接收数据并提交给系统。这项功 能就是通常所说的读操作,接收外部传输来的数据。 接收数据采用的方式有查询方式,中断方式和DMA方 式。
虚拟设备ttyDrv管理着IO系统和真实驱动程序之 间的通信。它将自身的入口点函数挂在IO系统上,创 建设备描述符并将其加入到设备列表中。当用户有IO 请求到达IO系统中时,IO系统会调用ttyDry相应的函 数相应请求。在IO系统看来,与之打交道的是ttyDry。