PCI设备Windows通用驱动程序设计.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PCI设备Windows通用驱动程序设计 2004-5-13 10:56:55 驱动开发网 李海   (华强电子世界网讯) 本文结合“通用高速PCI总线目标模块”的驱动程序设计,全面地讨论了Windows设备(特别是PCI设备)驱动程序编写时所面临的主要问题及解决方案,并提出了封装设备驱动的方法。   关键词: PCI设备驱动程序 端口 内存 中断 封装   在设计和使用PCI设备时,经常要在PC机的软件中访问和控制硬件设备,但Windows操作系统(包括Windows95/98、Windows NT、Windows 2000为了保证系统的安全性、稳定性和可移植性,对应用程序访问硬件资源加以限制,这就要求设计设备驱动程序以实现PC机的软件对PCI设备的访问。   Windows下的驱动程序不仅仅包括物理设备的驱动程序,也包括为文件系统等非物理设备编写的虚拟设备驱动程序。为了简化问题,下面只讨论硬件物理设备的驱动程序。本文将以撏ㄓ酶咚伲校茫勺芟吣勘昴?閿[1]的驱动设计为例,探讨PCI设备的驱动程序设计方案。我们开发了一套通用的PCI设备驱动程序,它可以完成一般PCI设备驱动所需的功能,可以作为其它PCI设备驱动开发的框架。    1 驱动程序的模式和开发工具的选择   设备驱动程序是指管理某个外围设备的一段代码。驱动程序不会独立地存在,而是操作系统的一部分。通过设备驱动程序,多个进程可以同时使用这些资源,从而可以实现多进程并行运行。在下文中,将调用设备驱动程序的pc机程序称为用户程序。   Windows 95和Windows NT采用的驱动程序体系不同,所以大多数情况下驱动程序也不能通用。如果设备需要在Windows 9X/NT下使用,一般至少要设计Windows 9X和Windows NT两个驱动程序版本。wINDOWS 98 可以兼容Windows 95的驱动程序,同时它又推出一个新的Win32 Drivers Mode (WDM)驱动类型。Windows 98中有些设备(如USB设备)的驱动程序必须为WDM模式。这个新的类型实际是在Windows NT的驱动模型的基础上增加了即插即用等内容。WDM驱动也可以用在Windows 2000(先前叫Windows NT5.0)中。从长远的角度看。今后开发人员只要开发WDM驱动就可以了,但从目前的市场情况来看,Windws 95是无法放弃的,所以WDM在近一两年还无法替代其它类型的设备驱动。   Intel 80386以上的微处理器有4个优先级别:0级、1级、2级和3级,一般操作系统运行于优先级0级上,而用户程序运行在3级上,在对硬件操作上有一些限制(具体的限制在不同的操作系统中是不同的)。Windows 95支持的驱动类型很多,但针对一般硬件设备而言,主要是VxD和打印机驱动两类。VxD指的是Virtual Device Drivers。VxD运行在Intel系统的0级上,可以执行特权级指令,对任何I/O设备有全部访问权,所以大多数硬件驱动程序都是VxD。VxD驱动通常以.vxd为扩展名,放在Windows\System目录下,可以在Windws 95启动时装入,也可以在程序运行时根据需要动态地载入。动态加载有助于节约系统内存和资源。但打印机驱动程序不是VxD,它运行在3级上。同Windows 95类似,Windows NT的驱动也有可以运行在0级的内核模式(Kernel Mode)和运行在3极的用户模式(User Mode)之分。由于Windows NT禁止用户模式的程序访问I/O端口(wINDOWS 95/98则允许用户程序直接访问I/O端口),直接控制物理设备的驱动程序都是内核模式的。而我们设计的PCI通用驱动程序要求对各种硬件资源访问,所以应该选择工作在0级的驱动程序模式。   开发设备驱动采用的主要开发工具是微软为设备开发者提供的软件包Device Driver Kit (DDK)。这个软件包包括有关设备开发的文档、编译需要的头文件和库文件、调试工具和程序范例。在DDK中还定义了一些设备驱动可以调用的系统底层服务,象DMA服务、中断服务、内存管理服务、可安装文件系统服务等等。这些都是编写设备驱动所必须的。但Windows 95的DDK由于主要使用汇编语言描述。开发起来比较困难。因此,我们在Windows 95操作系统中同时采用了Numega公司的产品VtoolsD。VtoolsD是基于C/C++的,支持Borland C++和Visual C++,使用和维护都较Windows DDK容易。    2 PCI驱动程序的特点   在设计驱动程序之前,首先要对欲控制的硬件设备进行细致地分析,更需要详细了解硬件设备的特性。硬件设备的特

文档评论(0)

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

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

1亿VIP精品文档

相关文档