当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]利用WinDriver开发PCI设备驱动程序

摘要:WinDriver是一套PCI驱动程序开发包。它改变了传统驱动程序开发的方法与思路,极在地简化了驱动程序的编制;同时,又没有牺牲驱动程序的性能,是一套高效、快捷的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主要特征

  ·提供了从用户层访问硬件的简单方法;

  ·能够方便地将性能要求特别苛刻的部分通过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=Card;

  WD_CardRegister(hWD,&cardReg); //向核心态登记,锁定卡上资源

  Item=Card.Item[2]; //将卡上的号为2的资源赋给Item

  if(Item.item==ITEM_MEMORY)

  {

  regAddr=Item.I.Mem.dwUserDirectAddr; //得到PCI卡上的内存映射到用户态的地址

  }

  Dma1.dwBytes=4*dwDWord;

  Dma1.pUserAddr=pBuffer1;

  Dma1.dwOptiONs=0;

  WD_DMALock(hWD,&Dma1); //锁定用于DMA的内存资源

至此与PCI卡上的内存进行DMA传输的准备已经完成,下面只要写相应的控制字就可以启动DMA操作了。

4 常见问题的解答

(1)评估版本的功能限制及其解决

评估版本除了30天的限制外,与正式版本相比还有3个限制。其中影响最大的是所有的关闭函数(DMA锁定内存的解锁,资源的关闭…)都加了延时。这样我们在做数据采集卡的驱动程序时就要注意,最好只分配一次资源。比如说做DMA操作,不要反复地锁定内存,这样会在解锁时损失效率。一个折衷的方法是锁定DMA内存后,一旦这块内存写满后,就将其中数据拷到用户态程序分配的大内存中去。

(2)用WinDriver开的程序效率

在使用WinDriver或者VxdTools这类工具时,大家最关心的一个问题可能就是效率问题。从实践与分析来看,WinDriver生成的驱动代码的效率相当地高。比如PCI卡的高速数据采集涉及到DMA的应用,WinDriver提供相应的API来将卡上的内存映射到用户态程序所能直接访问的地址空间中,然后直接对这个映射后得到的地址进行DMA操作。也就是说,与用DDK来直接编写驱动程序的区别就在于地址映射的操作上,在这部分工作上面,用WinDriver的API肯定没有直接用DDK写的专门面向特定硬件优化的代码来得高效。但是这部分代码实际上属于初始化工作,这部分的效率高低事实上并不会影响总体上的效率。

实际中,用WinDriver编写的PCI驱动程序在赛扬466、64M内存的机器上,在8位模式下可以稳定地采集4~8Mbytes/s的数据。而且随着硬件设计的改变,肯定还有提高余地。

经过实际应用,发现WinDriver这个软件使用快速,无论是开发效率还是实际达到的性能指标都相当令人满意。特别对于硬件开发人员来说,可以不必了解繁琐的操作系统的内核知识,就可以快速地开发出驱动程序,对于调试硬件是一个很好的帮助工具。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

USB摄像头是一种采用USB接口的视频采集设备,其优点在于即插即用、操作简便,无需额外驱动程序,支持笔记本电脑,并且成本较低,可以支持远程网络观看。

关键字: usb摄像头 驱动程序

与两相双极步进电机的驱动电路相比,两相单极步进电机的驱动电路在输入段配置、内部逻辑及控制电路和驱动电路使用双通道方面基本相同,但是输出段的配置不同。

关键字: 四相步进电机 驱动程序 程序电路

本文介绍了如何实现嵌入式MICREL网卡的驱动程序开发和设计。首先,我们介绍了MICREL网卡的概述和工作原理。然后,详细探讨了驱动程序的开发流程,包括硬件和软件的配置以及驱动程序的编写和测试。最后,总结了几点注意事项和...

关键字: 嵌入式 MICREL网卡 驱动程序

"上海·临港杯"人工智能全球创新大赛正式拉开帷幕 上海2023年9月25日 /美通社/ -- 9月19日下午,"上海·临港杯"人工智能全球创新大赛暨港...

关键字: 大赛 人工智能 创客 MIDDOT

上海2023年9月21日 /美通社/ -- 由于在雇主品牌建设拥有优异表现,台达于9月15日在 “2023 HRoot 人力资本论坛·上海站”获颁“2023大中华区卓越雇...

关键字: ROOT MIDDOT EXPLORING

成都2023年9月18日 /美通社/ --  由成都世纪康博会展有限公司承办的第29届中国·成都医疗健康博览会(简称:成都医博会)将于2023年9月21-23日在成都世纪城国际展览中心6/7号馆举...

关键字: 仪器设备 BSP MIDDOT 医疗器械

杭州2023年9月15日 /美通社/ -- 2023年9月14日,物产中大华妍"伊触即发·妍值城市运营会上海站",在上海衡山路小红楼顺利召开。汇聚上海行业大咖同仁,共赴金秋,点亮全国运营...

关键字: BSP MIDDOT 创始人 可持续发展

上海2023年9月13日 /美通社/ -- 智能汽车发展的突破口,早已不在汽车本身,而是蔓延至了整个科技生态,这也让众多科技公司实现了跨领域突破。深度赋能了《王者荣...

关键字: UNITY 魅族 领克 MIDDOT

引领生态品牌发展 深化用户体验与创新实践 北京2023年9月8日 /美通社/ -- 近日,2023第二届生态品牌峰会在北京正式落下帷幕。此次峰会正式发布了"2023年生态品牌势能图",揭晓了第二批成...

关键字: 可持续发展 数字化 国美 MIDDOT

电气化和智能化的发展趋势为舍弗勒带来新的增长机会 舍弗勒计划到2026年前,在全球范围内投入5亿欧元用于电机产能扩充和新产能建设 舍弗勒计划与VDL Groep合作开发自动驾驶穿梭巴士,首款展示车亮相展会...

关键字: 热管理 自动驾驶 MIDDOT 集成
关闭
关闭