PCI2040芯片驱动程序的开发(毕业论文).doc
《PCI2040芯片驱动程序的开发(毕业论文).doc》由会员分享,可在线阅读,更多相关《PCI2040芯片驱动程序的开发(毕业论文).doc(19页珍藏版)》请在三一文库上搜索。
1、PCI2040芯片驱动程序的开发摘要VxD是virtual v:tul X driver的简写,即虚拟设备驱动程序。x代表各种设备的名字,如虚拟键盘驱动程序(vkd),虚拟鼠标驱动程序(vmd)等等。VxD程序是硬件成功初始化的途径。记得dos程序认为它们拥有系统的一切,当它们在虚拟机中运行时,Windows需要给它们一个实机器的替身。VxD程序就是这些替身。VxD程序通常虚拟一些硬件设备,所以,例如当一个dos程序认为它在同键盘通讯时,实际是虚拟键盘驱动程序在和dos程序通讯。一个VxD程序通常控制真正的硬件设备并对该设备在各个虚拟机之间的共享进行管理。 尽管如此,并不是说每个VxD程序必须
2、和一个硬件设备相连。虽然VxD程序是用来虚拟硬件设备的,但是我们也可以把VxD程序看作是在第0级别的dll。例如,如果你需要做一些只有在第0级别才能做的工作,你就可以编一个VxD程序来为你完成这个工作。这样,由于此VxD程序并没有虚拟任何设备,你就可以把它仅仅看作是你的程序的扩展。 VxD程序是Windows 9x特有的,它在Windows NT下不能运行。所以如果你的程序是依靠VxD的,它就不能被移植到Windows NT平台上去。 VxD是系统中权力最大的实体。由于它们可以对系统作任何事情,所以它们是极度危险的。一个恶意的/错误的VxD程序可以毁掉整个系统。对于恶意的/错误的VxD程序没有
3、任何的保护措施。驱动程序:英文名为“Device Driver”,全称为“设备驱动程序”是一种可以使计算机和设备通信的特殊程序,可以 说相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 因此,驱动程序被誉为“ 硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。刚安装好的系统操作系统,很可能驱动程序安装得不完整。硬件越新,这种可能性越大。菜菜熊之前看到的“图标很大且颜色难看”就是没有安装好驱动的原因。 在软件测试中:在自底向上测试中,要编写称为测试驱动的模块调用正在测试的模块。测试驱动模块以和将来真正模块同样的方式挂
4、接,向处于测试的模块发送测试用例数据,接受返回结果,验证结果是否正确。 随着电子技术的飞速发展,电脑硬件的性能越来越强大。驱动程序是直接工作在各种硬件设备上的软件,其“驱动”这个名称也十分形象的指明了它的功能。正是通过驱动程序,各种硬件设备才能正常运行,达到既定的工作效果。 硬件如果缺少了驱动程序的“驱动”,那么本来性能非常强大的硬件就无法根据软件发出的指令进行工作,硬件就是空有一身本领都无从发挥,毫无用武 之地。这时候,电脑就正如古人所说的“万事俱备,只欠东风”,这“东风”的角色就落在了驱动程序身上。如此看来,驱动程序在电脑使用上还真起着举足轻重的 作用。 从理论上讲,所有的硬件设备都需要安
5、装相应的驱动程序才能正常工作。但像CPU、内存、主板、软驱、键盘、显示器等设备却并不需要安装驱动程序也可以正常工作,而显卡、声卡、网卡等却一定要安装驱动程序,否则便无法正常工作。这是为什么呢? 这主要是由于这些硬件对于一台个人电脑来说是必需的,所以早期的设计人员将这些硬件列为BIOS能直接支持的硬件。换句话说,上述硬件安装后就 可以被BIOS和操作系统直接支持,不再需要安装驱动程序。从这个角度来说,BIOS也是一种驱动程序。但是对于其他的硬件,例如:网卡,声卡,显卡等等 却必须要安装驱动程序,不然这些硬件就无法正常工作。 第一章 绪论 驱动程序实际上可以理解为是一系列控制硬件设备的函数。在DO
6、S系统中,一个驱动程序可能是一个连到应用程序.EXE中的一个模块或者是与应用程序分开的一个独立部分;在Widows系统中,封装驱动程序的方法是制作一个DLL或VxD。在早期,由于我们一般涉及的与计算机相关的硬件设备都是标准设备,它们的驱动程序是由厂家或专门的程序开发人员提供并加以封装,用户只需了解与驱动程序相连的Windows应用程序接口(API),而无需知道其内部运行机制。但是如果硬件是非标准设备,我们必须针对该特定硬件自己来设计Windows环境下的设备驱动程序。the Application Programming Interface API 我所面对的硬件是一块超声波探伤卡,它集成在一
7、块PCI插卡上,桥接芯片采用了PCI2040,因为它可以和DSP无缝连接。我要做的工作是首先利用主机通过并口启动模拟采样部分,当采样数据放大后进入A/D变换后存入储存器,在数据存储器中存满一帧时,硬件向主机发中断,主机响应中断后通过PCI2040芯片读出存放在数据存储器中的采样数据,然后进行后续处理并将结果显示于屏幕。我编写的应用程序的软件平台是Window95/98,采样的工具是VisualC+6.0(简称VC+),因为它是一种面向对象的编程语言,具有良好的交换性,可以根据用户对界面上的控件或菜单操作作出相应的处理,而且它可以自动根据要求生成框架,我们要做的只是对空的函数框架进行填充。由于应
8、用程序运行在Ring3级,它不能对硬件进行直接访问,也不会响应硬件中断,必须通过驱动程序来响应中断以及访问硬件。该硬件显然不是Windows标准组件,系统不会提供相应的VxD驱动程序,因此必须自己编写PCI2040的硬件安装信息文件和驱动程序。值得一提的是在通过并口与硬件通信时理论上也得写VxD但是由于并口是Windows标准组件,Windows已经封装了一些常用的API函数(如_inp()和_outp()等函数),可以在应用程序中直接使用,而且像打印机等利用并口传输数据的硬件的驱动程序已经被认为不属于虚拟设备驱动程序了。RING3在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致
9、整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。形象地说,特权指令就是那些儿童不宜的东东,而非特权指令则是老少皆宜。 Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。Windows只使用RING0和RING3,RING0只给操作系统用,RING3谁都能用。如果普通应用程序企图执行RING0指令,则Windows会显示“非法指令”错误信息。因为有CPU的
10、特权级别作保护。在本论文安排上首先介绍驱动程序的产生背景、实现原理和开发工具,然后介绍PCI总线及PCI2040芯片,最后说明我的驱动程序以及相应的应用程序。第二章 Windows环境下的驱动程序在DOS操作系统时代,对于一个应用程序而言它总认为自己是唯一运行的程序,因此常常可以直接访问硬件,独占所有的系统内存以及系统运行时间,当然也就不需要设备驱动程序。但是到了Windows时代,DOS应用程序并不是唯一运行的程序,系统中同时可能有若干个应用程序在运行,这就使得系统不可能让它随意的直接访问硬件,否则就会引起混乱导致系统崩溃。为了解决这个问题,人们提出了将系统的资源虚拟化,让应用程序运行在一个
11、虚拟的环境中的虚拟机(VM)上,而管理程序和驱动程序运行在实际机器上(Ring0级),由它们来处理针对硬件的操作。2.1虚拟机(VM) 虚拟资源是由系统产生的假象,它是硬件(甚至是软件)资源的仿真,当系统虚拟了所有或者几乎所有的程序可以访问的资源时,它就创造了一个“虚拟机”(VM)。概括起来,Windows的虚拟机完全透明地仿真了以下地资源和性能:l 可访问的内存空间;l I/O操作;l 中断操作;l 外围设备(显示器、键盘等);虚拟机的管理主要由虚拟机管理器(VMM)完成。VMM利用系统的硬件创造了几个相互独立的虚拟机,每个虚拟机都有自己的虚拟环境,而且每个虚拟环境可能与物理环境根本不同。让
12、所有的Windows应用程序(Win16应用程序和Win32应用程序)运行在一个VM上,称为系统VM;而每一个DOS应用程序都分别运行在各自的一个VM上,这样便解决了DOS和Windows应用程序的兼容问题。2.2处理器运行模式及各种程序优先级 为了创建和维护虚拟机,VMM开发了80386以及以后的兼容处理器的特殊性能。这些处理器有三种运行模式:实模式、保护模式和V86模式,它们决定了处理器所能寻址的地址空间,如何实现逻辑地址到物理地址的转换以及如何保护对内存和I/O端口的访问。Windows95/98利用了其中的保护模式和V86模式两种模式,以下各项也是针对这两种模式而言。Windows95
13、/98执行环境支持四种不同的基本模式: 管理程序、Win32应用程序、Win16应用程序和DOS应用程序。其中管理程序在Ring0级(最高级)中运行,能够访问和控制实际硬件环境,也就是说它们在真正的计算机上运行,而不是在虚拟机上运行,在所有构成Windows的组件中,只有VMM和VxD在管理环境中执行。Windows应用程序在Ring3级(最低级)的保护模式上运行,它们不能直接访问硬件,一旦执行一个对硬件的操作就会引起一个异常事件,这时处理器切换到Ring0级,并且将控制权交给相应的控制器。所有Windows应用程序分享一个系统虚拟机。每个DOS应用程序运行在各自的V86虚拟机(类似于系统虚拟
14、机)上,标注为Ring3级(最低级),它访问的硬件资源和中断也被隐藏和虚拟了。23如何实现虚拟机当在虚拟机中执行程序时,Windows必须能够捕获并透明的“代替”以下功能:l 对I/O端口查询l 对一个内存映射的外围设备查询。l 可能导致传送到虚拟机之外的操作,如一个异常时间或中断。2.3.1捕获I/O操作不论保护模式还是V86模式,操作系统都可以捕获输入和输出指令来防止应用程序直接访问I/O映射的设备。Windows98/95使用I/O优先级(IOPL)和I/O允许映射(IOPM)(0表示拒绝,1表示允许)来控制VM访问I/O地址。在保护模式中,每个代码段都有一个相关的优先级描述器,它存储在
15、描述器列表中。当在保护模式中执行一个I/O指令时,处理器将段的IOPL和当前代码段的优先级(CPL)比较,如果CPLIOPL且IOPM=0,处理器才执行指令,否则产生一个异常事件。在V86模式中,处理器只参照IOPM,与IOPL无关。Windows和它的标准组件VxD可以捕获PC机上的所有标准I/O设备,由于我们使用的不是标准硬件,因此要自己编写VxD,流程也相似先向VMM申请捕获我们的硬件端口的服务,安装回调处理器,当VM访问该端口时产生异常进入我们的回调处理中,由我们自己编写的函数进行处理。2.3.2捕获内存操作Windows主要根据页错误机制实现对存储器映射设备访问的虚拟化。要捕获对某个
16、设备内存的访问,设备VxD会将页表中对应于为了内存的页标注为“不可用”。当在虚拟环境中运行的程序试图访问这个页时,会产生一个错误。VMM的异常处理器会调用已注册的设备VxD的页错误处理器进行相关处理。2.3.3捕获中断和异常事件Windows必须能够捕获一些具有优先级的指令,因为它们可能会绕过处理器的保护特性或干扰虚拟机的完整性。如影响处理器中断标志指令(CLI,STI,POPF,IRET等),调入描述表的指令(LLDT,LGDT,LIDT等)。解决的方法是在Ring3层上一旦执行一个有优先级的指令,就会引起一个异常事件。这时处理器就会切换到Ring0层并将控制交给相应的控制器。2.4各种驱动
17、程序比较l VxD VxD是虚拟设备驱动程序,是系统用于对各种硬件资源识别,管理,维护运作的扩展。VXD和VMM(虚拟机管理器)一起合作,维持着系统的运作。VxD模式从WIN3X时代就开始了.一直到了WIN98还一直在MS的WIN系列操作系统中起主导作用。VxD运作在INTEL系列CPU保护模式下的RING0,拥有对硬件的最高控制权。l KMDKMD是Kernel Mode Driver的缩写,它是WindowsNT下提出的管理,维护硬件运作的驱动程序模式。该DRIVER运行于WindowsNT的KERNEL模式下(类似于RING0),但是,一个KMD的运作环境在不同的时候是根本不同的。DRI
18、VER收到设备请求时的运行环境很可能和设备请求实际操作的运行环境根本不同,因此在WindowsNT下DRIVER的运作也受到WindowsNT本身的许多限制。l WDMWDM是Win32 Driver Model的简写,它可以和Windows2000兼容,乃微软力推的全新的驱动程序模式,它实际也可以理解为一个即插即用(PNP)的KMD。但是由于Windows98对WDM的支持有限,而且WMD的代码很长,能用VxD时一般不采WDM,因此目前WDM的实际应用还不多,但随着Windows2000/NT的普及WDM必将成为主流的驱动程序模式。2.3驱动程序的开发工具l DDK开发虚拟设备驱动程序(Vx
19、D)的常规方法是使用Microsoft出品的设备驱动程序开发工具包DDK(Device Developer Kit)。它有Windows98 DDK和Windows2000 DDK两个版本。前者能够开发Windows95/98/Me/NT下的VxD、KMD和WDM驱动程序,后者可以开发Windows98/Me/NT/2000下的KMD和WDM驱动程序。它要求设计者必须对Windows的体系结构、设备驱动程序的结构、虚拟机管理器(VMM)以及Intel CPU体系结构有深入的了解,而且需要保护模式的汇编语言编程经验。 因此,在实际中DDK一般不常被人使用,取而代之的是下面二种开发工具。l Vto
20、olsDVireo公司出色的VtoolsD由可视的VxD代码生成器QuickVxD、C运行库、VMM/VxD服务库、C+类库以及VxD的装入程序等组成。利用QuickVxD生成的框架程序和经充分测试过的C运行库或C+类库可以绕过DDK用C或C+来编制驱动程序,这就大大地简化了开发的难度,提高了可靠性。框架程序可以直接在Visual C+集成开发环境中用NMAKE编译为VxD。由于利用VtoolsD主要针对Windows85/98驱动程序编程,写出的VxD程序相对比较简洁,而且它容易上手,因此我在实际编写VxD设备驱动时使用了该工具。l WinDriverWinDriver是美国KRFTech公
21、司出品的用于编写驱动程序的另一种工具包。它包括1个类似于Q uickVxD的代码生成器WinDriver Wizard、1个WinDriver发行包、2个公用程序。与VToolsD一样,WinDriver工具包的优点在于可以使编程人员用C或C+语言来编写设备驱动 程序,而不是将大量精力放在编写那些复杂的、难于调试的内核模式代码。 以上介绍的3种工具各有优点。DDK功能强大,编程灵活,适用范围广,可应用于各类硬件驱动程序的编写,但对编程人员的要求较高,编程难度较大。VToolsD主要工作环境是在Windows 98/95下,它具有较强的开发能力和较高的开发效率,是编程人员常用的工具。WinDri
22、ver的适用面比前二者窄,它主要针对ISA/PCI插卡,而对其他类硬件的技术支持较少,但它编写的程序可同时工作在Windows95/98/NT操作系统第三章VxD虚拟设备驱动程序VxD是虚拟设备驱动程序(Virtual X Driver)的缩写,中间的x表示某一类设备。如VKD.VXD表示键盘的驱动程序,当然一个VxD并非一定对应一个硬件设备,有的VxD只是为其他的VxD或应用程序服务,有的VxD也可能只是对应一个不存在的硬件。但是所有的VxD都有一个共同的特点,即“到任何地方做任何事情”。它们可以访问内存地址,访问硬件端口,捕获其他程序对内存和端口的访问,甚至可以截获硬件中断,VxD模式从W
23、indows3.1时代就开始了,一直到Windows95/98/ME它还一直在微软的操作系统中起主导作用。3.1VxD的开发工具在编写VxD时我采用了Vireo公司的VtoolsD工具,它由QuickVxD,DebugMonitor及INF Edit等组成。QuickVxD工具(见图32)可以快速生成VxD的代码框架,开发者只需填写几个选项然后在生成的框架中再增加自己的代码,编程效率比较高而且程序比较简洁,QuickVxD的使用在下面将详细介绍。DebugMonitor工具(见图31)具有两个功能,一个是用来观察VxD在debug状态下的输出流,另一个是可以强制执行和终止VxD的运行。图31I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PCI2040 芯片 驱动程序 开发 毕业论文
链接地址:https://www.31doc.com/p-3902902.html