板卡驱动 c VxD驱动程序编写方法与实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要

VxD是virtual['və:tʃuəl] X driver的简写,即虚拟设备驱动程序。x代表各种设备的名字,如虚拟键盘驱动程序(vkd),虚拟鼠标驱动程序(vmd)等等。

VxD程序是硬件成功初始化的途径。记得dos程序认为它们拥有系统的一切,当它们在虚拟机中运行时,Windows需要给它们一个实机器的替身。VxD程序就是这些替身。VxD程序通常虚拟一些硬件设备,所以,例如当一个dos 程序认为它在同键盘通讯时,实际是虚拟键盘驱动程序在和dos程序通讯。一个VxD程序通常控制真正的硬件设备并对该设备在各个虚拟机之间的共享进行管理。尽管如此,并不是说每个VxD程序必须和一个硬件设备相连。虽然VxD程序是用来虚拟硬件设备的,但是我们也可以把VxD程序看作是在第0级别的dll。例如,如果你需要做一些只有在第0级别才能做的工作,你就可以编一个VxD程序来为你完成这个工作。这样,由于此VxD程序并没有虚拟任何设备,你就可以把它仅仅看作是你的程序的扩展。

VxD程序是Windows 9x特有的,它在Windows NT下不能运行。所以如果你的程序是依靠VxD的,它就不能被移植到Windows NT平台上去。

VxD是系统中权力最大的实体。由于它们可以对系统作任何事情,所以它们是极度危险的。一个恶意的/错误的VxD程序可以毁掉整个系统。对于恶意的/错误的VxD程序没有任何的保护措施。

驱动程序:英文名为“Device Driver”,全称为“设备驱动程序”是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。因此,驱动程序被誉为“ 硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。

刚安装好的系统操作系统,很可能驱动程序安装得不完整。硬件越新,这种可能性越大。菜菜熊之前看到的“图标很大且颜色难看”就是没有安装好驱动的原因。

在软件测试中:在自底向上测试中,要编写称为测试驱动的模块调用正在测试的模块。测试驱动模块以和将来真正模块同样的方式挂接,向处于测试的模块发送测试用例数据,接受返回结果,验证结果是否正确。

随着电子技术的飞速发展,电脑硬件的性能越来越强大。驱动程序是直接工作在各种硬件设备上的软件,其“驱动”这个名称也十分形象的指明了它的功能。正是通过驱动程序,各种硬件设备才能正常运行,达到既定的工作效果。

硬件如果缺少了驱动程序的“驱动”,那么本来性能非常强大的硬件就无法根据软件发出的指令进行工作,硬件就是空有一身本领都无从发挥,毫无用武之地。这时候,电脑就正如古人所说的“万事俱备,只欠东风”,这“东风”的角色就落在了驱动程序身上。如此看来,驱动程序在电脑使用上还真起着举足轻重的作用。

从理论上讲,所有的硬件设备都需要安装相应的驱动程序才能正常工作。但像

CPU、内存、主板、软驱、键盘、显示器等设备却并不需要安装驱动程序也可以正常工作,而显卡、声卡、网卡等却一定要安装驱动程序,否则便无法正常工作。这是为什么呢?

这主要是由于这些硬件对于一台个人电脑来说是必需的,所以早期的设计人员将这些硬件列为BIOS能直接支持的硬件。换句话说,上述硬件安装后就可以被BIOS 和操作系统直接支持,不再需要安装驱动程序。从这个角度来说,BIOS也是一种驱动程序。但是对于其他的硬件,例如:网卡,声卡,显卡等等却必须要安装驱动程序,不然这些硬件就无法正常工作。

第一章绪论

驱动程序实际上可以理解为是一系列控制硬件设备的函数。在DOS系统中,一个驱动程序可能是一个连到应用程序.EXE中的一个模块或者是与应用程序分开的一个独立部分;在Widows系统中,封装驱动程序的方法是制作一个DLL或VxD。在早期,由于我们一般涉及的与计算机相关的硬件设备都是标准设备,它们的驱动程序是由厂家或专门的程序开发人员提供并加以封装,用户只需了解与驱动程序相连的Windows应用程序接口(API),而无需知道其内部运行机制。但是如果硬件是非标准设备,我们必须针对该特定硬件自己来设计Windows环境下的设备驱动程序。

the Application Programming Interface API

我所面对的硬件是一块超声波探伤卡,它集成在一块PCI插卡上,桥接芯片采用了PCI2040,因为它可以和DSP无缝连接。我要做的工作是首先利用主机通过并口启动模拟采样部分,当采样数据放大后进入A/D变换后存入储存器,在数据存储器中存满一帧时,硬件向主机发中断,主机响应中断后通过PCI2040芯片读出存放在数据存储器中的采样数据,然后进行后续处理并将结果显示于屏幕。

我编写的应用程序的软件平台是Window95/98,采样的工具是VisualC++6.0(简称VC++),因为它是一种面向对象的编程语言,具有良好的交换性,可以根据用户对界面上的控件或菜单操作作出相应的处理,而且它可以自动根据要求生成框架,我们要做的只是对空的函数框架进行填充。由于应用程序运行在Ring3级,它不能对硬件进行直接访问,也不会响应硬件中断,必须通过驱动程序来响应中断以及访问硬件。该硬件显然不是Windows标准组件,系统不会提供相应的VxD驱动程序,因此必须自己编写PCI2040的硬件安装信息文件和驱动程序。值得一提的是在通过并口与硬件通信时理论上也得写VxD但是由于并口是Windows标准组件,Windows已经封装了一些常用的API函数(如_inp()和_outp()等函数),可以在应用程序中直接使用,而且像打印机等利用并口传输数据的硬件的驱动程序已经被认为不属于虚拟设备驱动程序了。

RING3

在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。形象地说,

相关文档
最新文档