企业: | 控制网 | 日期: | 2004-12-01 |
---|---|---|---|
领域: | 工业以太网 | 点击数: | 1178 |
王郁平 凌志浩 吴勤勤 1 引言 现代计算机硬件功能的强大,使其操作系统也变得复杂,Windows 2000凭借其良好的安全性和稳定性成为目前主流操作系统。然而由于Windows 2000的安全机制使得用户应用程序不能对系统的硬件资源进行直接访问,这样就需要在应用程序与硬件之间构筑驱动程序模块。在实际工控应用中需要对自行开发的硬件设备进行控制,这样就需要开发特定的设备驱动程序来跨越操作系统边界对硬件资源进行操作,并与用户应用程序进行通信。本文给出了一个基于PCI总线的LonWorks智能通信适配卡驱动程序开发与应用实例,实现了应用程序与适配卡中双口RAM之间的数据通信。 2 WDM驱动模型 2.1 Windows 2000的系统结构 要写驱动程序,必须要了解操作系统的结构。在WDM体系中,Windows 2000操作系统是最标准的实现方式,图1显示了Windows 2000系统结构。在Windows 2000操作系统环境下,一部分组件运行在用户模式下,其它的则运行在内核模式下。 用户模式下的应用程序对Windows子系统进行Win32 API的调用,这个调用由系统服务接口作用到I/O管理器,I/O管理器进行必要的参数匹配和操作安全性检查,然后创建一个称为IRP(IO Request Package,IO请求包)的数据结构,并把此IRP作为参数传递给驱动程序。这样,驱动程序处理这个请求包,通过识别IRP中的物理设备对象(Physical Device Object,PDO)来区别是发送给哪个设备的,当要访问硬件时,驱动程序通过调用硬件抽象层函数来实现。硬件抽象层是Windows体系中的一个重要概念,它屏蔽了不同硬件平台的差异,向操作系统上层提供统一接口。当驱动程序处理完这个请求后,会将处理结果返回给I/O管理器,最后再由I/O管理器将执行结果返回给用户模式下的应用程序。 图1 Windows 2000系统结构 2.2 WDM驱动程序模型 在WDM驱动程序模型中,每个硬件设备至少有两个驱动程序:一个称为功能(function)驱动程序,它了解使硬件工作的所有细节,负责初始化I/O操作,处理I/O操作完成时所带来的中断事件,为用户提供一种设备适合的控制方式;另一个称为总线(bus)驱动程序,它负责管理硬件与计算机的连接。 一个驱动程序通常包含许多例程,当操作系统遇到一个IRP包时,就调用驱动程序中相应的例程来执行该IRP的操作,基本驱动例程有: (1) DriverEntry例程:负责驱动程序的初始化,主要是初始化驱动程序范围的数据结构和资源。所有驱动程序都必须包含此例程,当驱动程序被装载时,PnP管理器为每个驱动程序调用一次DriverEntry例程。 (2) AddDevice例程:PnP管理器调用此例程来初始化由该驱动程序所控制的设备。当系统运行时,一旦有新设备被枚举,系统将调用AddDevice例程。 (3) Upload例程:负责释放由DriverEntry例程所分配的驱动程序范围内的资源。 3 WDM驱动程序开发 3.1 硬件背景 LON适配卡硬件接口如图2所示,现场智能节点通过LonWorks总线将数据传到监控计算机的LON适配卡时,Neuron芯片通过总线收发器读入数据,通过转换和运算后,按规定的协议写入双口RAM中,这样监控计算机就可以通过PCI总线控制器读取双口RAM中的数据,来得到各智能节点送来的数据,实现监控功能。反之当计算机要发送参数或控制信息给智能节点时,PCI总线控制器把PC机发送来的数据按照一定的协议写入到双口RAM中,Neuron芯片读取双口RAM中的信息,然后通过总线收发器发送到LonWorks总线网络中去。 图2 适配卡硬件接口原理图 3.2 驱动开发工具的选择 现在比较流行的驱动开发工具主要有3种:Windows DDK,DriverWorks,Windriver。表1简单对这3种工具作了分析和比较。在此,选择DriverWorks开发工具和Visual C++语言来对LON适配卡的驱动程序进行开发。 表1 开发工具的分析比较 3.3 WDM驱动程序框架 DriverWizard是DriverWorks创建WDM框架程序的工具,其简单易用的开发向导能够帮助开发人员迅速开发出特定的硬件设备驱动程序框架,其主要步骤包括: (1) 选择运行平台:有WDM Driver,NT4.0 Style Driver,Empty Driver Project,Simple C++ Driver,如果选择WDM Driver则会进一步要求选择WDM类型,包括WDM Function Driver或WDM Filter Driver等。 (2) 选择总线类型:有ISA、PCI、USB、PCMCIA |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
1.我有以下需求: | |
|
|
2.详细的需求: | |
* | |
姓名: | * |
单位: | |
电话: | * |
邮件: | * |