關(guān) 閉

新聞中心

EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > Windows9x/NT及2000下中斷驅(qū)動程序的統(tǒng)一化處理

Windows9x/NT及2000下中斷驅(qū)動程序的統(tǒng)一化處理

作者: 時間:2009-05-13 來源:網(wǎng)絡(luò) 收藏

以其友好的圖形用戶界面,使得它不僅成為辦公管理首選的操作系統(tǒng),也日益受到工程技術(shù)人員的關(guān)注,逐漸取代DOS而成為主流的工程應(yīng)用控制平臺。但是,系統(tǒng)為了保證平臺的安全與完整性,對系統(tǒng)底層操作采取了屏蔽的策略,利用VxD將用戶與硬件隔離開來。 在9x(95、97、98)下,用戶如果需要實現(xiàn)對硬件的、DMA或存儲空間物理地址等資源進(jìn)行訪問,必須通過設(shè)備驅(qū)動程序來進(jìn)行硬件操作;而在Windows下,即使是簡單的I/O操作,也需要編寫驅(qū)動程序方能與硬件打交道。

本文引用地址:http://www.butianyuan.cn/article/202698.htm

  Windows操作系統(tǒng)的主流目前是Windows9x和Windows,而已經(jīng)推出的Windows是以Windows為主要框架的。由于Windows9x和WindowsNT兩者在系統(tǒng)核心上有質(zhì)的不同,所以即使對于同樣一個硬件,在兩者下的驅(qū)動程序也有很大的區(qū)別。因此,一般而言,需要針對不同的操作系統(tǒng)編寫不同的驅(qū)動程序。

  兼容X86指令的微機(jī)CPU運行時有4個優(yōu)先級,Ring0~Ring3。操作系統(tǒng)與驅(qū)動程序運行在Ring0級,可以對所有硬件資源進(jìn)行控制;用戶程序運行在Ring3級,對資源控制受到一些限制。而對于Ring0級的驅(qū)動程序而言,它的編寫和調(diào)試通常需要對操作平臺的運行機(jī)制有較深的了解,從而要求程序開發(fā)者掌握Windows9x、NT及Windows的內(nèi)核管理機(jī)制,對于開發(fā)人員來講這有相當(dāng)大的難度。 在這里,筆者使用了美國Jungo公司出品的WinDriver工具包,利用其繞過了對操作系統(tǒng)內(nèi)核的學(xué)習(xí)掌握這個難點,并且在不更改程序代碼的前提下,完成了在多個操作系統(tǒng)下對硬件的一致處理,很方便地解決了硬件與程序在不同系統(tǒng)下的移植問題。

1 Windows下硬件的管理機(jī)制

  在多任務(wù)的環(huán)境里,硬件設(shè)備中斷管理程序是非常重要的系統(tǒng)級程序。它不僅要把硬件發(fā)生的中斷時間傳給相應(yīng)的驅(qū)動程序,還要允許某些設(shè)備驅(qū)動程序處理它們特殊的中斷服務(wù)。在Windows平臺下,VPICD(虛擬可編程中斷控制器)就是這樣的硬件設(shè)備管理程序,它負(fù)責(zé)管理所有的硬件中斷時間。VPICD通過一個缺省機(jī)制觸發(fā)駐留在VM(虛擬機(jī))內(nèi)的中斷處理函數(shù)。它完全允許VxD根據(jù)其需要而重載中斷處理函數(shù)。PC機(jī)的硬件中斷需要確定硬件中斷的IRQS(中斷申請?zhí)?,對一個特定的IRQ中斷源,VPICD或提供缺省的中斷處理函數(shù),或允許其它VxD重載中斷處理函數(shù)。

  VPICD提供的缺省中斷處理是:首先置中斷禁止,再觸發(fā)相應(yīng)VM中的中斷處理函數(shù)。因為VPICD實現(xiàn)了對PPIC(物理可編程中斷控制器,如8259中斷控制器)的虛擬化,所以當(dāng)VM中的中斷處理函數(shù)發(fā)送EOI(中斷處理結(jié)束指令)時,VPICD即對PPIC發(fā)EOI指令。最后,VPICD控制處理函數(shù)的返回操作,恢復(fù)中斷,并置VM狀態(tài)為VM進(jìn)入中斷前的狀態(tài)。當(dāng)VPICD對某些中斷的缺省處理不夠充分或則不太合適時,就需要親手編寫一個VxD,在其中實現(xiàn)中斷的虛擬化。VxD將決定如何處理硬件中斷以及如何調(diào)用VM中的中斷處理函數(shù)。

  下面將要詳述的WinDriver對中斷處理作了很好的封裝,將對VPICD和VM的控制和處理以及某些特殊的驅(qū)動要求封裝在經(jīng)過嚴(yán)格調(diào)試的WinDriver.vxd和WinDriver.sys中,并對調(diào)用驅(qū)動程序的API(應(yīng)用編程接口)函數(shù)進(jìn)行了系統(tǒng)集成,讓使用者直接面對用高級語言集成好的類庫和函數(shù)接口,從而大大降低了程序開發(fā)的難度,縮短了開發(fā)周期。

2 WinDriver工具包簡介

  WinDriver是美國Jungo公司出品的用于編寫驅(qū)動程序的一種工具包,主要針對ISA/PCI插卡,4.2版本以后還提供了USB的開發(fā)工具。最新版本4.40版所編寫的程序兼容性十分強(qiáng)大,包括了Windows9x、Windows NT、Windows、Windows CE、Linux、Solaris(Intel)、VxWorks (Intel) 、OS/2等諸多操作平臺。WinDriver主要包括一個WinDriverWizard、一個WinDriver發(fā)行包、多個公用程序以及大量的例程。

  (1)WinDriverWizard

  這是一個友好的Windows向?qū)Ы缑妗_\行WinDriverWizard,它可以讓你立即接觸到硬件而不用寫一句有關(guān)的代碼。這種便利來自于它的自動檢測功能。對于ISA插卡,用戶可以直接利用它來讀寫卡上的內(nèi)存、I/O地址、寄存器以及偵聽中斷。對于PCI插卡,除了上面的基本功能外,還可以方便地讀寫PCI的配置信息。

  在此之后,通過選擇“GenerateCode”選項,WinDriverWizard會為你的插卡產(chǎn)生基本的程序代碼。4.2版本以后還提供了多種編程語言選擇,幾乎包括了所有流行的編程語言,如VC4?|VC6、Borland C++Builder3?|4、Pascal、Delphi、Linuxmake、Solariesmake等等。這就讓用戶不必去學(xué)新的編程語言,很容易地直接上手。


上一頁 1 2 3 4 下一頁

關(guān)鍵詞: Windows 2000 NT 中斷

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉