Windows2000設(shè)備驅(qū)動(dòng)程序的研制開發(fā)_第1頁(yè)
Windows2000設(shè)備驅(qū)動(dòng)程序的研制開發(fā)_第2頁(yè)
Windows2000設(shè)備驅(qū)動(dòng)程序的研制開發(fā)_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Windows2000設(shè)備驅(qū)動(dòng)程序的研制開發(fā)

引言:由于工作關(guān)系,我經(jīng)常涉及PC機(jī)與外圍設(shè)備接口的工作,從PC機(jī)這方面要做的工作看來(lái),主要是通過(guò)接口處理外圍設(shè)備的中斷,通過(guò)I/O端口或內(nèi)存地址與外設(shè)互相傳遞數(shù)據(jù)。從計(jì)算機(jī)原理的角度看,所要達(dá)到的目的很簡(jiǎn)單,那么如何編寫程序完成上述功能呢?目前國(guó)內(nèi)流行的PC操作系統(tǒng)有三種:DOS,Win95/98系列,WindowsNT。DOS是單用戶、單任務(wù)操作系統(tǒng),由于PC機(jī)硬件處理速度不斷提高,基于單用戶、單任務(wù)的操作系統(tǒng)越來(lái)越不能充分發(fā)揮硬件的功能,現(xiàn)在只應(yīng)用于一些老式PC及其它個(gè)別場(chǎng)合,有逐漸被淘汰的趨勢(shì);Win95/98系列和WindowsNT屬于多任務(wù)操作系統(tǒng),不論從其原理還是界面上看,這兩種操作系統(tǒng)都比DOS有著無(wú)可比擬的優(yōu)越性,這兩種操作系統(tǒng)雖然在界面和操作上及其相似,但其內(nèi)部實(shí)現(xiàn)的諸多方面有許多區(qū)別,有些區(qū)別是本質(zhì)上的。Win95/98設(shè)計(jì)目標(biāo)是針對(duì)一般家庭用戶,安全性及可靠性存在許多薄弱環(huán)節(jié),就可靠性而言,Win95/98系列不能很好的防止多任務(wù)環(huán)境中某個(gè)進(jìn)程的非法操作導(dǎo)致系統(tǒng)中其它程序甚至整個(gè)系統(tǒng)的崩潰,而WindowsNT在這方面及其它諸多方面設(shè)計(jì)的相當(dāng)嚴(yán)謹(jǐn)。這兩種操作系統(tǒng)是Microsoft公司同一時(shí)期的產(chǎn)品,但針對(duì)不同的使用群,所以在一些重要場(chǎng)合及生產(chǎn)實(shí)踐中應(yīng)該選擇WindowsNT作為計(jì)算機(jī)的操作系統(tǒng),此外,從發(fā)展趨勢(shì)來(lái)看,WindowsNT已經(jīng)成為定型產(chǎn)品,具有相對(duì)穩(wěn)定性。在不同操作系統(tǒng)下編寫驅(qū)動(dòng)程序是有很大區(qū)別的,在DOS平臺(tái)上,應(yīng)用程序和設(shè)備驅(qū)動(dòng)程序之間沒有標(biāo)準(zhǔn)的接口,它們?cè)谕獠勘憩F(xiàn)為一個(gè)擴(kuò)展名為EXE的文件,驅(qū)動(dòng)程序的作用被柔和在應(yīng)用程序中,這樣,應(yīng)用程序?yàn)榱耸褂貌煌瑥S商的同一類設(shè)備,必須了解這些設(shè)備在接口上具體的硬件實(shí)現(xiàn),同時(shí),對(duì)于一個(gè)特定型號(hào)的硬件產(chǎn)品,所有支持它的應(yīng)用軟件中對(duì)于控制整個(gè)設(shè)備動(dòng)作的這部分代碼,可能被多次重寫。這種情況不適應(yīng)硬件及應(yīng)用軟件的飛速發(fā)展。Windows系統(tǒng)在這方面,進(jìn)行了根本性改進(jìn),把控制設(shè)備動(dòng)作的這部分代碼獨(dú)立出來(lái),提出了設(shè)備驅(qū)動(dòng)程序的概念,驅(qū)動(dòng)程序是應(yīng)用程序和硬件設(shè)備之間的一個(gè)橋梁,應(yīng)用程序與驅(qū)動(dòng)程序之間有明確的接口,應(yīng)用程序通過(guò)與驅(qū)動(dòng)程序交換信息,達(dá)到控制外設(shè)的目的。接口定義的操作是面向設(shè)備的,這就是說(shuō),在應(yīng)用程序的設(shè)計(jì)中,并不用關(guān)心對(duì)外設(shè)操作的具體硬件實(shí)現(xiàn),只是對(duì)驅(qū)動(dòng)程序發(fā)出一系列指令既可;驅(qū)動(dòng)程序接受來(lái)自上層應(yīng)用程序的指示,具體操縱實(shí)際硬件,完成用戶功能。具體實(shí)現(xiàn)上,Win95/98系列與WindowsNT又有所區(qū)別,WindowsNT是嚴(yán)格按照上述思路設(shè)計(jì)的;而Win95/98系列不那么嚴(yán)格,其支持上述思路,但同時(shí)應(yīng)用程序也可以繞過(guò)驅(qū)動(dòng)程序直接訪問(wèn)實(shí)際物理I/O,這樣做,增加程序設(shè)計(jì)的靈活性,但同時(shí),對(duì)系統(tǒng)可靠性造成一定隱患。這也正是Win95/98系列可靠性低于WinNT的原因之一。表1-1三種操作系統(tǒng)下訪問(wèn)接口比較[注]‘所有’指I/O端口,RAM總線,中斷,DMA。WindowsNT設(shè)備驅(qū)動(dòng)程序的組成原理WindowsNT操作系統(tǒng)結(jié)構(gòu)分為用戶模式和內(nèi)核模式,用戶模式下的編程為應(yīng)用程序的設(shè)計(jì),而開發(fā)設(shè)備驅(qū)動(dòng)程序,則屬于內(nèi)核模式下的編程,內(nèi)核模式組件包括NTExecutive(ExXxx),內(nèi)核(KeXxx),硬件抽象層(HalXxx)。其層次如圖2-1所示,其中NTExecutive包括幾個(gè)獨(dú)立的軟件組件,它們是系統(tǒng)服務(wù)接口(ZwXxx),對(duì)象管理器(ObXxx),配置管理器,進(jìn)程管理器(PsXxx),安全監(jiān)視器(SeXxx),虛擬空間管理器(MemXxx),本地進(jìn)程調(diào)用,I/O管理器(IoXxx)。內(nèi)核模式的系統(tǒng)服務(wù)并不是全部公開的,而是提供了一系列開發(fā)設(shè)備驅(qū)動(dòng)程序需要的函數(shù)(上文括號(hào)內(nèi)為函數(shù)形式,函數(shù)手冊(cè)參見[2]Kernel-ModeDrivers-Reference章節(jié)),換言之,這些函數(shù)功能是所有內(nèi)核模式的系統(tǒng)服務(wù)功能的子集。驅(qū)動(dòng)程序由一系列相對(duì)獨(dú)立的函數(shù)組成,由I/O管理器根據(jù)需要調(diào)用這些函數(shù),對(duì)于一個(gè)需要處理中斷的最簡(jiǎn)單的驅(qū)動(dòng)程序也需要由以下幾個(gè)函數(shù)構(gòu)成:1.DriverEntry()運(yùn)行于PASSIVE_LEVEL驅(qū)動(dòng)程序入口點(diǎn),當(dāng)驅(qū)動(dòng)程序被手動(dòng)或自動(dòng)裝入系統(tǒng)后,驅(qū)動(dòng)程序從這點(diǎn)開始執(zhí)行,主要用于定位硬件資源,建立指向其它驅(qū)動(dòng)程序函數(shù)的指針等其它初始化工作。2.XxUnload()運(yùn)行于PASSIVE_LEVEL用于驅(qū)動(dòng)程序從系統(tǒng)卸出之前,釋放由驅(qū)動(dòng)程序占用的所有系統(tǒng)資源。3.XxIsr()運(yùn)行于DIRQL中斷服務(wù)程序。4.XxDpcForIsr()運(yùn)行于DISPATCH_LEVEL中斷服務(wù)程序后處理程序,以排隊(duì)方執(zhí)行不太關(guān)鍵代碼的執(zhí)行,由于排隊(duì)機(jī)制及優(yōu)先級(jí),不會(huì)造成代碼擁塞從而提高中斷服務(wù)程序的響應(yīng)并且提高系統(tǒng)總體I/O吞吐率。5.XxOpen()運(yùn)行于PASSIVE_LEVEL處理應(yīng)用程序Win32函數(shù)CreateFile()請(qǐng)求。6.XxClose()運(yùn)行于PASSIVE_LEVEL處理應(yīng)用程序Win32函數(shù)CloseHandle()請(qǐng)求。7.XxDispatch()運(yùn)行于PASSIVE_LEVEL處理應(yīng)用程序Win32函數(shù)DeviceIoControl()請(qǐng)求,通過(guò)一系列自定義命令,驅(qū)動(dòng)程序與應(yīng)用程序交換特定的信息。WindowsNT使用一個(gè)抽象化的CPU優(yōu)先級(jí)方案,IRQL代表中斷請(qǐng)求級(jí),任一時(shí)刻CPU總處在某一級(jí)上,這個(gè)數(shù)越大,表示當(dāng)前的任務(wù)重要性越大,如表2-1所示,從上至下IRQL越來(lái)越小。所有上述驅(qū)動(dòng)程序的函數(shù)及內(nèi)核模式函數(shù)都必須運(yùn)行于各自的IRQL級(jí)上,如果違反這一調(diào)用規(guī)定,會(huì)造成系統(tǒng)崩潰。例如,中斷服務(wù)程序(XxIsr)運(yùn)行于DIRQL及上,那幺在編寫中斷服務(wù)程序時(shí),只能調(diào)用允許在這一級(jí)運(yùn)行的內(nèi)核模式函數(shù)(并不是所有內(nèi)核模式函數(shù)都能運(yùn)行于DIRQL級(jí))。至于每個(gè)內(nèi)核模式函數(shù)運(yùn)行級(jí)別的說(shuō)明,詳見[2]Kernel-ModeDrivers-Reference章節(jié)。WindowsNT是一多任務(wù)系統(tǒng),許多設(shè)備的驅(qū)動(dòng)程序同時(shí)存在系統(tǒng)中,這樣各個(gè)設(shè)備所占用的資源(中斷,I/O及RAM地址空間)很有可能沖突,如果設(shè)備驅(qū)動(dòng)程序在運(yùn)行之前不進(jìn)行‘探測(cè)’而使用自己硬件設(shè)備的資源,有可能和系統(tǒng)內(nèi)其它設(shè)備占用的資源沖突,后果不堪設(shè)想。WindowsNT通過(guò)注冊(cè)表管理硬件資源的占用信息,作為內(nèi)核模式信任的組件,驅(qū)動(dòng)程序使用硬件資源之前必須遵循‘查詢-申請(qǐng)-使用-釋放’的原則(如圖2-2所示)。表2-1WindowsNT設(shè)備驅(qū)動(dòng)程序的編寫步驟與實(shí)例現(xiàn)以一實(shí)際例子簡(jiǎn)要說(shuō)明設(shè)備驅(qū)動(dòng)程序的開發(fā)步驟,本例以CINRAD天氣雷達(dá)測(cè)試卡實(shí)際應(yīng)用為原型,加以簡(jiǎn)化、抽象。第一步,了解被控設(shè)備的接口情況。本例為一ISA卡,占用PC機(jī)9號(hào)中斷,I/O地址360H及RAM地址D0228H分別一個(gè)字空間。W

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論