张 艳 高一栋
(西安电子工程研究所 西安 710100)
在某信号处理系统应用中,需要数据板与计算机之间建立硬件传输通道,将处理输出的数据实时地传输到计算机中,以便于进行显示、存储及做其他的后续处理。同时,计算机使用的Windows操作系统,应用程序工作在“用户模式”下,需要设计人员编写设备驱动程序实现对硬件设备的访问。
图1 WinDriver体系结构图
目前,开发Windows环境下常用的设备驱动程序的工具主要有DDK(Device Driver Kit)和Win-Driver。DDK是Microsoft公司的设备驱动程序开发软件,使用DDK开发驱动程序,必须精通Windows内部体系结构、MicrosoftMASM汇编语言和设备驱动程序结构体系方法,以及具备丰富的内核模式程序开发经验,否则可能造成软件的不稳定,甚至系统的崩溃。而美国Jungo公司推出的WinDriver驱动程序工具包,把底层操作都封装在一个内核模块中,提供给用户标准的WinDriver API函数来实现硬件访问,可使编程人员用C或C++语言在用户模式下编写驱动程序,不涉及操作系统底层编程且具有很好的兼容性,在短期内就可开发出实现基本功能又具有较高执行效率的驱动程序。图1所示为Win-Driver体系结构图。
以使用的WinDriver v6.02版为例,它支持目前通用的 Windows98/Me/NT/2000/XP/CE/CE.NET/Server2003,Linux,Solaris和VxWorks等操作系统,而且利用WinDriver产生的驱动程序和应用程序源代码在这些操作系统中都是互相兼容的[1]。同时它支持PCI/CardBus/ISA/ISAPnP/EISA/Com-pactPCI和USB等多种总线结构。
下面,介绍利用WinDriver的用户模式在DriverWizard向导的引导下按步骤完成驱动代码的生成。
A.选择硬件,产生.INF文件。
PCI(Peripheral Component Interconnect)总线具有即插即用的特点,在Driver Wizard将会显示所有的即插即用(Plug-and-Play)设备列表,从中选择对应的硬件,产生.INF安装文件,然后添加此新硬件。
B.配置、诊断硬件。
Driver Wizard将自动测试硬件设备资源,包括I/O地址范围、内存范围,寄存器以及中断。根据需要进行手动添加、设置。
定义完PCI总线硬件设备资源后,在写驱动程序之前,还需要使用Driver Wizard简单诊断硬件是否工作正常,如:用“read”和“write”来读写硬件的内存及寄存器。用“listen”来监听硬件中断。
C.生成硬件驱动样本。
在硬件诊断正确后,选择特定的开发环境或编程语言(我们选择的C++Builder),让WinDriver生成一个相应开发环境的设备驱动样本(设置的工程名字是:mypic)。生成的驱动样本代码主要包括:a.各种工程文件,在C++Builder 6.0中其文件为mypic.bpr,mypic.cpp 等;b.设备的应用级 API函数文件:mypic-lib.c;c.利用上述API函数访问硬件的样本程序文件:mypic-diag.c;
用户可以直接利用驱动样本中的标准WinDriver API函数来实现对硬件的操作和访问。
将WinDriver API函数移植到用户应用程序中的方法是,在C++Builder6.0中新建一个工程,将头文件mypic-lib.h包含进源代码中。然后根据实际需要,选择mypic-lib.c需要用到的硬件操作API函数,将它们拷贝到新建工程的函数定义部分。最后用户在工程中加入完成设备具体任务的功能代码,在代码中调用拷贝的API函数进行硬件操作,便完成了用户级驱动的开发。以下是程序片段:
如上述,已经成功完成信号处理数据板和计算机之间CPI总线数据的传输,每次中断循环读取1024点数据。
下面完成应用程序的显控程序部分。摘选程序片段如下:
信号处理数据板向计算机发送某雷达SAR图像数据,此实时数据采集程序运行中的界面截图如图2所示。
图2 实时数据采集程序运行中显示界面图
本文采用WinDriver和C++Builder两种开发工具,实现了对PCI总线高速数据采集程序的设计。在实际应用中,系统运行稳定,完成实时数据传输、显示、存储。同时可以看出,利用WinDriver软件工具包在Windows操作系统下开发设备驱动程序是一种高效、可靠的方式,值得大多数非专业驱动程序的研发人员使用。
[1]WinDriver v6.02 User's Guide[M].Jungo Ltd,20thMay 2003.
[2]PCI LocalBus Specification[M].Revision 2.2 De-cember18,1998.
[3]李幼仪,甘志.C++Builder高级应用开发指南[M].清华大学出版社,2002.
[4]简育华.基于WinDriver的Windows驱动程序开发[J].火控雷达技术,2011,40(1):68-70.