利用WinDriver开发PCI设备驱动程序..docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用WinDriver开发PCI设备驱动程序.

摘? 要:WinDriver是一套PCI驱动程序开发包。它改变了传统驱动程序开发的方法与思路,极在地简化了驱动程序的编制;同时,又没有牺牲驱动程序的性能,是一套高效、快捷的PCI驱动程序开发软件包。特别适合专业硬件人员的使用。 设备驱动程序 WinDriver PCI WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发。作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运行效果。从目前国内的资料上来看,大多数设计人员还是在用DDK、Wtools开发设备驱动程序,因而作者觉得有必要向大家介绍与推荐这个软件。 WinDriver是一套设备驱动程序开发组件,它的目的就是方便Windows程序员快速开发出PCI/ISA设备的Windows驱动程序(目前必威体育精装版的版本V4.32还支持PCMCIA、USB设备的驱动程序的开发,并且除了支持Windows9X/NT系统外,还有支持Unix、Windows CE的版本推出)。利用WinDriver开发设备驱动程序,不需要熟悉操作系统的内核,整个驱动程序中的所有函数都是工作在用户态下的,通过与WinDriver的.Vxd或者.Sys文件交互来达到驱动硬件的目的。由于是一个用户态程序,效率的高低也就成了人们选择WinDriver时关心的一个问题。大量实践数据表明,WinDriver并没有通过牺牲系统性能来换取驱动程序的快速开发,的确是一个“像开发用户态程序那样简单,像核心态程序那样高效”[1]的开发工具。 图1是WinDriver的体系结构图。 1 WinDriver主要特征 ·提供了从用户层访问硬件的简单方法; ·能够方便地将性能要求特别苛刻的部分通过Windriver提供的API插入到核心态模式运行,提高执行效率; ·对主流PCI接口芯片(AMCC、PLX、V3系列)提供了很好的支持; ·可以利用常见的软件开发平台(Visual C++、Borland C++、VB4、Java、Delphi); ·支持I/O、DMA、中断处理,支持PCI、ISA、EISA设备的开发; ·无需DDK以及核心态程序开发的经验。 2 开发步骤 a.根据WinDriver的文档,建议开发步骤如下: ·修改代码,加入定制功能; ·在用户态执行与调试代码; ·将性能苛刻部分插入到核心态; b.我们在实际编写驱动程序的过程中发现,完全用WinDriver提供API来写驱动程序比在Wizard生成的框架代码上修改更为灵活。一般来说,PCI驱动程序分成3个部分:初始化部分,对硬件资源的访问函数库、具体调用部分。其中,后面两个部分对于不同的硬件都是基本一致的。比如说,我们先后开发的基于AMCC5933与PLX9052的PCI接口卡,对于他们的硬件资源访问,用的都是WinDriver下面相同的API;两者开发的不同只在于初始化时对于硬件资源的锁定。所以只要开发出了针对一种接口芯片的系统的驱动代码后,以后一般只要修改接口芯片的ID值及一些寄存器的偏移值,就能够移植了,比每次生成不同的框架代码再改动也许要更简便。 3 实例分析 整个驱动程序的结构大致如下: ·打开WinDriver设备; ·查找我们要访问的PCI设备; ·枚举该设备的资源(内存、I/O、中断); ·锁定该设备的资源只能为我们所用,不能被其他程序访问; ·访问板上的资源; ·解锁资源; ·关闭WinDriver设备。 以下为一段使用WinDriver开发的AMCC5933DMA的驱动代码,利用这个程序来演示WinDriver的程序结构。这个程序只要稍加修改,就可以用来作为其他PCI卡的驱动程序的一部分,例如PLX9050、9054。为了节省篇幅,省略了变量说明部分。程序中出现的变量大都由其名称可以反映含义,具体可以参见WinDriver的设计文档中的说明。 hWD=WD_Open(); //打开WinDriver设备,每次使用前必须调用; pciScan.searched.dwVendorId=0x10e8; //AMCC公司供货号 pciScan.searched.dwDeviceId=0x4750; //AMCC5933的设备号 WD_PciScanCards (hWD,pciSxcan); //枚举PCI槽上的设备 pciSlot =pciScan.cardSilt[0]; //假设只有我们一个设备得到设备槽的号码 pciCardInfo.pciSlot=pciSlot; WD_PciGetCardInfo(hWD,pciCardInfo); //得到该设备槽上的设备信息 Card=pciCardInfo.Card; //Card为一个反映PCI卡上资源的结构 cardReg.Card=

文档评论(0)

cv7c8hj6b4I + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档