基于VxBus设备驱动程序架构的设备驱动开发_第1页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于vxbus设备驱动程序架构的设备驱动开发vxbus是风河公司新的设备驱动程序架构,是新增的特性,它是在vxworks6.2及以后版本被增强到vxworks中的。在以前的版本中,驱动程序并没有和工程配置集成到一起,假如要配置设备驱动,就要通过修改bsp名目下的config.h和syslib.c文件来完成。而基于vxbus架构模型的益处是允许驱动的集成和配置在workbench工程中完成。这就意味着在workbench环境下,每个驱动程序都能通过可视化环境举行配置,都能够按要求添加或删除设备。本文结合基于pci2040数据采集卡驱动的开发过程,分析了vxbus架构下驱动的设计实现。1 vxbu

2、s简介vxbus是指在vxworks中用于支持设备驱动的特有的架构,这种架构包含对minimal bsp的支持。它包括以下功能:允许设备驱动匹配对应设备;提供驱动程序拜访硬件的机制;软件其他部分拜访设备功能;在vxworks系统中,实现设备驱动的模块化。vxbus在控制器驱动程序服务的支持下,能在总线上发觉设备,并执行一些初始化工作,使驱动与硬件设备之间正常的通讯。图1是vxbus 在囫囵系统中的位置暗示图。从图1中可以看到,vxbus起到了辅助总线的作用,提供了对总线控制驱动的支持。在vxworks6.2版本发布前,设备驱动并不能被集成到vxworks工程配置当中,为了添加或移出设备驱动,需

3、要有丰盛的bsp和驱动开发相关的学问。并且在驱动被添加或移出时要去做一些管理vxworks 工程的额外的工作。作为vxworks系统组件的一部分,vxbus消退了上面碰到的一些难题,各种驱动和支持组件的添加与删除彻低可以在workbench工程中举行,而不需要bsp和驱动相关的学问,也不会在添加、删除驱动时增强管理vxworks工程的额外工作。因此大大便利了bsp的开发。2 硬件介绍ti公司推出的pci2040是一款用于实现pci局部总线与之间无缝链接的专用芯片。在vxworks实时操作系统环境下实现主机与dsp的通讯,系统利用pci2040实现tms320vc5410与主机的通讯。因为pci

4、2040是ti的配套专用芯片,硬件级的衔接比较容易,将对应的引脚衔接即可。需要注重的是,未用的输入信号线需要通过上拉上拉至有效规律电平。tms320vc5410的mcbsp0与tlc2548 衔接,实现8路12位a/d数据的采集。tms320vc5410将采集到的数据通过pci2040传输到主机上,数据在主机上得到进一步的处理。硬件衔接框图2所示。3 驱动开发基于vxbus架构下pci2040设备驱动的开发主要包括设备的初始化、设备控制以及设备驱动如何以组件形式添加到workbench配置界面中。下面分步介绍它的实现。3.1设备驱动初始化设备的初始化,包含在bsp的初始化过程中,主要分三个阶段

5、,3所示。3.1.1内核预初始化阶段系统上电启动,cpu在上电时跳转到一个指定的地址 ,开头执行命令,初始化内存和cpu,然后是vxworks 的初始化处理。在vxworks内核预初始化早期,bsp的syshwinit( )函数被执行,在这个函数中,设备驱动初始化工作第一步被执行。syshwinit( )函数执行一些早期的初始化,调用hardwareinterfaceinit( )函数,执行初始化硬件内存分配机制,这步允许在系统内存池初始化之前,限制为设备驱动分配内存,这个函数接着调用hardwareinterfacebusinit( ),在hardwareinterfacebusinit(

6、)函数中完成全部设备驱动和模块的注册工作。pci2040的注册函数是vxbpci2040register()。vxbpci2040register()通过数据结构,向系统注册一些设备初始化函数。其中涉及到三个数据结构:local struct drvbusfuncs pcifuncs =pci2040instinit, /* devinstanceinit */pci2040instinit2, /* devinstanceinit2 */pci204instconnect /* devconnect */在这个结构中,包含了初始化阶段要调用的函数。下面的初始化过程会用到这些函数。local

7、struct vxbdevicemethod pci2040methods =devmethod(readhpid, pci2040readhpid),devmethod(writehpid, pci2040writehpid),devmethod(readhpia, pci2040readhpia),devmethod(writehpia, pci2040writehpia),devmethod(readh, pci2040readhpic),devmethod(writehpic, pci2040writehpic),devmethod(read, pci2040readcsr),devm

8、ethod(writecsr, pci2040writecsr), 0, 0 这个结构提供了应用软件操作硬件的一些函数及办法。local struct vxbpciregister pci2040devpciregistration =null, /* pnext */vxb_devid_device, /* devid */vxb_busid_pci, /* busid = pci */vxb_ver_4_0_0, /* vxbversion */lnpci_name, /* drvname */&pci2040funcs, /* 总线驱动函数*/pci2040methods, /*

9、 设备办法结构 */pci2040probe, /* 设备探测函数 */pci2040paramdefaults /* 参数*/,nelements(pcipci204devidlist),pcipci204devidlist /*设备资源列表*/;最后这个结构在vxbpci2040registe()中被用法。这个结构包括几个驱动的初始化入口,其中pci2040probe()是pci2040采集卡的硬件探测函数,该函数在vxbus初始化过程中检测采集卡的数量,当检测到采集卡时,将采集卡与驱动结合,形成设备的一个实例,以便应用程序用法。pci204instanceinit( )函数在vxbus初

10、始化的第一阶段被调用, pci204instanceinit( )函数只是容易地确保设备的中断被禁止。当全部驱动在vxworks注册之后,hardwareinterfacebusinit( )和hardwareinterfaceinit( ) 函数返回,syshwinit( ) 完成非vxbus 驱动的初始化并返回。syshwinit( ) 函数返回后,vxworks内核被初始化。3.1.2 内核自检在这个阶段,内核在syshwinit2( )中执行,bsp调用pci2040instanceinit2( )函数。在这个函数中,建立系统内存到设备空间的映射。关键部分代码如下:local void

11、 pci204instinit2(vxb_device_id pdev)for (i = 0; i vxb_maxbars; i+)if (pdev-regbaseflags i = vxb_reg_io)break;if (i = vxb_maxbars)return;pdrvctrl-pci2040bar = pdev-pregbase i;vxbregmap (pdev, i, &pdrvctrl-pci2040handle);/设备i/o映射到系统内存此时,完成内核服务初始化,并可以被驱动拜访。但是,中间层的服务仍然无效。3.1.3 应用程序初始化驱动部分在devinstanc

12、einit2( )函数最后,创建用户的运行任务,并完成设备驱动的初始化。在这个阶段,pci2040instanceconnect( )函数被调用,完成最后的初始化工作,在这个函数中,主要是建立中断与中断服务程序的衔接。至此,设备驱动的初始化完成。3.2驱动程序的配置采纳vxbus驱动的一个主要优点是:设备的驱动程序可以被看成vxworks 系统的一个组件,通过集成的workbench开发环境来配置设备驱动。为了实现这一功能,开发的驱动需要增强一些额外的扩展文件。标准vxworks设备驱动有一个最小的文件集,对于大多数vxworks设备驱动,最小的设备驱动集要求有6个单独的文件。pci2040数

13、据采集卡需要有以下文件:· 一个驱动源文件pci2040.c,执行驱动运行规律,包括pci2040驱动的实现代码。· 一个组件描述文件pci2040.cdf,允许集成驱动到vxworks开发工具workbench当中。· 一个pci2040.dc文件,提供驱动注册函数原型。· 一个pci2040.dr文件,提供一个调用注册函数的代码段。· 一个readme文件 ,提供版本信息。· 一个makefile 文件,提供建立驱动的编译规章。当上述文件在workbench环境下举行相应的配置后,pci2040的设备驱动就会以组件的形式浮现在开发

14、工程的kernel configuration选项中,可以便利地举行pci2040驱动配置。4 应用程序与驱动的通信为了使设备和驱动能够在vxworks系统中用法,让应用程序、中间件、vxworks内核模块拜访设备,执行一些操作,最基本的办法是在vxworks中采纳vxbus办法来实现硬件设备的拜访。vxbus办法是在驱动中藏匿一个入口,使vxbus中api函数可以调用这些入口函数。在pci2040初始化阶段,pci2040methods结构中注册的函数就是在驱动中藏匿的函数,用于对pci2040的操作。例如,通过pci2040 完成对dsp数据寄存器的拜访struct vxbdriverco

15、ntrol ctrl;vxbdevmethodrun(devmethod_call(readhpid),vxbdevmethodrun( )函数够被用于调用一个指定的驱动办法,这个函数反复查找全部的实例,并检查每一个,看是否有指定藏匿申明的办法,假如实例有指定的办法,vxbdevmethodrun( )调用办法函数。为了避开重复遍历在系统上的全部实例,可以用 vxbdevmethodget( )函数找出驱动函数相对应的驱动办法 ,然后通过下面代码完成函数调用。status (*methodfunc)(vxb_device_id devid, void * parg);methodfunc =

16、bdevmethodget(devid,devmethod_call(readhpid);if(methodfunc != null )(*methodfunc)(devid, parg);在pci2040的数据采集卡中,通常是dsp在采集完数据后,通过中断通知主机,去读取数据。下面是中断服务相关代码。void pci2040isr() temp=*(pci2040. instid.pregister+0x4); /读中断寄存器if(tempr&0x1)!0) /检查是否是该实例中断 *(pci2040. instid.pregister +0x4)=0x1;temp= *(pci2040. instidpdsphpicregiste

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论