王郁平 凌志浩 吳勤勤
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
熱點新聞
推薦產品