




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 ISA數(shù)據(jù)采集卡的WDM驅(qū)動程序?qū)崿F(xiàn) 張 龍 時間:2008年11月18日 字 體: 大 中 小 關(guān)鍵詞: 摘? 要: ISA設(shè)備在WINDOWS新的驅(qū)動程序模型WDM(WINDOWS DRIVER MODEL)中沒有獲得
2、很好的支持,使用WDM實現(xiàn)需要一些特殊處理。主要討論老式ISA設(shè)備的WDM驅(qū)動程序的設(shè)計與實現(xiàn)。關(guān)鍵詞: Windows驅(qū)動程序模型(WDM)? 工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(ISA)? 數(shù)據(jù)采集?WDM作為微軟為WINDOWS 2000及以后版本準(zhǔn)備的新驅(qū)動模型,它可以在WINDOWS 98及以后的操作系統(tǒng)上共享。這種具有跨平臺性的設(shè)備驅(qū)動模型可以大大簡化驅(qū)動程序的開發(fā)工作。WDM支持PNP(即插即用),為用戶的PNP設(shè)備驅(qū)動完成了大量的底層工作。這也使得WDM對各種老設(shè)備,特別是那些不具有即插即用特性硬件的支持明顯不足。在科研和工控中,最常用的數(shù)據(jù)采集卡通常都是基于PC總線的不能為PNP提供硬件支持的IS
3、A設(shè)備。為這類硬件編寫非WDM驅(qū)動程序只能局部支持PNP特性,而且需要做大量額外的工作如:必須檢測硬件,為硬件創(chuàng)建設(shè)備對象(用于代表硬件),配置并初始化硬件使其正常工作,這些工作非常復(fù)雜。利用WDM可以避免這些麻煩。1 WDM的結(jié)構(gòu)WDM實際上是一個編寫驅(qū)動程序的規(guī)范。其驅(qū)動程序結(jié)構(gòu)的特點和WINDOWS程序設(shè)計的消息驅(qū)動機(jī)制很相像,采用IRP驅(qū)動機(jī)制。WINDOWS 98和WINDOWS 2000處理IRP的方式一樣,本質(zhì)卻完全不同。WDM驅(qū)動程序面對的主要內(nèi)容是一系列內(nèi)核驅(qū)動對象。這些對象包括驅(qū)動對象、設(shè)備對象,還有一系列的資源抽象對象如中斷對象、適配器對象(處理DMA操作)、內(nèi)核模式派發(fā)
4、器對象、控制器對象、推遲過程對象、定時器對象、設(shè)備隊列對象、回調(diào)對象等。其中驅(qū)動對象由I/O管理器負(fù)責(zé)創(chuàng)建和管理。設(shè)備對象代表用戶需要操作的物理或者是邏輯設(shè)備。設(shè)備對象負(fù)責(zé)管理自己設(shè)備所需要的各種資源對象。這些資源對象有的代表真正的物理設(shè)備如中斷對象、適配器對象、定時器對象;有的對象則是邏輯對象,它們是操作系統(tǒng)實現(xiàn)自己的特性所必需的,如推遲過程調(diào)用就是與操作系統(tǒng)的搶占式多任務(wù)的實現(xiàn)有關(guān)。WDM驅(qū)動程序利用IRP和這些對象完成硬件設(shè)備的抽象化,并對應(yīng)用程序提供統(tǒng)一操作接口。這就是所謂的WDM規(guī)范。·DriverUnload 指向驅(qū)動程序的清除例程。I/O管理器會在卸載驅(qū)動程序前調(diào)用該例
5、程。通常WDM驅(qū)動程序的DriverEntry例程一般不分配任何資源,所以DriverUnload例程也沒有什么清除工作要做。 ·DriverExtension->AddDevice 指向驅(qū)動程序的AddDevice函數(shù)。AddDevice函數(shù)是WDM驅(qū)動程序的一個特殊函數(shù),PNP管理器為每個設(shè)備實例調(diào)用該函數(shù)。它創(chuàng)建一個設(shè)備對象并把它連接到該驅(qū)動程序的設(shè)備堆棧中。在這個函數(shù)里,設(shè)備對象被創(chuàng)建,設(shè)備需要的中斷、DMA等資源被掛接到這個設(shè)備對象上,相應(yīng)地處理函數(shù),如中斷服務(wù)例程等也被指定。·DriverStartIo,如果驅(qū)動程序使用標(biāo)準(zhǔn)的串行IRP,則必須使用這個函數(shù)
6、,使它指向驅(qū)動程序的StartIo例程。·MajorFunction是一個指針數(shù)組,它主要處理各種用戶的I/O請求IRP。默認(rèn)情況下,用戶的所有I/O請求都會由I/O管理器返回失敗。驅(qū)動程序為要處理的IRP指定相應(yīng)的派遣函數(shù)。此外,還有一些重要的例程如用于處理中斷操作的中斷服務(wù)例程,為了提高系統(tǒng)中斷處理效率的中斷服務(wù)推遲調(diào)用例程等。驅(qū)動程序的其余部分就是前面所指定的那些例程的實現(xiàn)。2 為ISA設(shè)備分配資源雖然WDM驅(qū)動程序可以簡化很多工作,但是給ISA設(shè)備編寫WDM驅(qū)動程序也有困難。這個困難是ISA設(shè)備所需資源的分配問題。根據(jù)PNP的規(guī)范,支持PNP的設(shè)備如PCI總線設(shè)備有相應(yīng)的寄存
7、器標(biāo)識自己和自己可以接受的資源,如中斷、端口范圍、內(nèi)存范圍等,并且有相應(yīng)的邏輯支持配置資源。這使得操作系統(tǒng)啟動過程中可以動態(tài)地規(guī)劃和調(diào)整各個設(shè)備的資源而不需要用戶的干預(yù)。為了使ISA設(shè)備具有這種PNP的特性,可以通過PNP管理器和INF文件完成ISA設(shè)備的自動資源分配。PNP管理器(PNP MANAGER)依賴INF文件完成PNP管理。INF文件為設(shè)備、設(shè)備驅(qū)動程序、操作系統(tǒng)的安裝過程提供信息(包括PNP MANAGER)。為了兼容非PNP設(shè)備,INF文件支持幾個命令為設(shè)備分配資源。這些信息被提供給PNP管理器,并且被PNP管理器用來與系統(tǒng)其它部分協(xié)商以完成非PNP設(shè)備的自動資源分配。LOGC
8、ONFIG為設(shè)備制定一個可選的資源設(shè)定。還有相關(guān)的IRQCONFIG、IOCONFIG、DMACONFIG、MEMCONFIG子命令,它們?yōu)樵O(shè)備指定具體的可選資源。語法如下:?ConfigPriority=DMAConfig=IOConfig=IRQConfig=MemConfig=其中CONFIGPRIOITY命令指定這個LOGCONFIG項的優(yōu)先級。其余子命令表示設(shè)備選用的硬件資源。下面是一個例子:?CX2590.Install;其它命令LogConfig=CX2590_DMA;指定配置項的名稱CX2590_DMA? ? ? ;配置項的名稱ConfigPriority=NORMAL ?;配
9、置的優(yōu)先級IOConfig=4300-3ff%3ff(3ff:);指定IO范圍IRQConfig=4,5,9,10,11? ;指定可選的中斷DMAConfig=0,1,2,3? ;指定可選的DMA在INF文件中加入LOGCONFIG命令可以解決ISA總線設(shè)備資源的自動分配問題,就可以為ISA總線設(shè)備編寫WDM驅(qū)動程序。3 一個ISA設(shè)備WDM驅(qū)動程序的實現(xiàn)使用Numega公司的開發(fā)工具DriverStudio 2.01可以大大地簡化驅(qū)動程序的開發(fā)過程。DriverStudio開發(fā)通用內(nèi)核模式的開發(fā)包是DriverWorks,DriverWorks是一個面向?qū)ο蟮墓ぞ甙?。它封裝了比較底層的繁復(fù)操
10、作,提供給開發(fā)者一個簡潔的界面。同時,DriverWorks和Visual C+有很好的接口:DriverWorks專門為Visual C+提供了一個專門開發(fā)WDM驅(qū)動程序的WIZARD。在WIZARD指導(dǎo)下,開發(fā)者可以很容易地生成一個驅(qū)動程序的框架。開發(fā)者要作的工作就是根據(jù)特定硬件編寫相應(yīng)的代碼。WIZARD生成的框架不僅包括設(shè)定設(shè)備的資源如中斷、IO端口范圍、內(nèi)存范圍;還包括自動生成驅(qū)動程序與應(yīng)用程序的接口命令及處理這些命令的處理函數(shù),生成標(biāo)準(zhǔn)驅(qū)動程序的標(biāo)準(zhǔn)驅(qū)動程序例程;包括DriverEntry驅(qū)動程序入口例程、UnLoad卸載例程、Dispach標(biāo)準(zhǔn)派發(fā)器例程、StartIO標(biāo)準(zhǔn)I/O
11、傳輸例程、中斷處理例程等。對于WDM驅(qū)動程序,包括生成驅(qū)動程序接口(WDM專有),設(shè)備的符號連接,I/O傳輸方式以及WDM電源管理和處理PNP請求的IRP處理子程序。WIZARD完成后的代碼主要包括兩類,一類是驅(qū)動對象,它構(gòu)成了一個驅(qū)動程序的框架;另一類是驅(qū)動程序的設(shè)備對象。驅(qū)動程序?qū)ο筘?fù)責(zé)創(chuàng)建并管理驅(qū)動程序設(shè)備對象。設(shè)備對象負(fù)責(zé)管理硬件的各種資源如I/O、IRQ、DMA。它還負(fù)責(zé)處理各種IRP的例程。設(shè)備對象是系統(tǒng)所有I/O操作的基石,一個驅(qū)動程序必須有一個或一個以上的設(shè)備對象才真正有意義。驅(qū)動對象和設(shè)備對象的關(guān)系很象WINDOWS系統(tǒng)中進(jìn)程和線程的關(guān)系:進(jìn)程是可執(zhí)行代碼(就是線程)的框架。
12、如果說驅(qū)動對象是WINDOWS中的進(jìn)程,那么設(shè)備對象就像進(jìn)程中的線程,它們完成實際的I/O操作。設(shè)備對象使用保護(hù)成員變量來管理設(shè)備的資源,使用成員函數(shù)來處理各種IRP請求,并由這些函數(shù)完成實際的I/O操作。/ 驅(qū)動對象class AC_1810 : public KDriverSAFE_DESTRUCTORSpublic:virtual NTSTATUS DriverEntry(PUNICODE_STRINGRegistryPath);/ 驅(qū)動程序的入口函數(shù)virtual NTSTATUS AddDevice(PDEVICE_OBJECT Pdo);/ 完成設(shè)備對象和驅(qū)動對象的連接;/ 設(shè)備對
13、象class AC_1810Device : public KPnpDevice/ Constructorspublic:AC_1810Device(PDEVICE_OBJECT Pdo, ULONG Unit); / 構(gòu)造函數(shù)完成資源配置public:BOOLEAN Isr_Irq(void);? / IRQ中斷服務(wù)例程virtual NTSTATUS Create(KIrp I);? / 標(biāo)準(zhǔn)IRP處理函數(shù)virtual NTSTATUS Close(KIrp I);? / COMMENT_ONLYvirtual NTSTATUS Read(KIrp I);? / COMMENT_ONLY
14、virtual VOID StartIo(KIrp I);? / 開始I/O傳輸VOID CancelQueuedIrp(KIrp I);? / 判斷傳輸IRP是否被取消VOID Invalidate(void);? / 釋放資源例程virtual NTSTATUS DefaultPnp(KIrp I); ? / 處理默認(rèn)的PNP操作virtual NTSTATUS DefaultPower(KIrp I); ? / 管理電源void SerialRead(KIrp I); ? / 完成實際的I/O操作NTSTATUS IOCTL_SETUP_Handler(KIrp I); /采樣參數(shù)設(shè)定N
15、TSTATUS IOCTL_REW_Handler(KIrp I);? / 開始/停止采樣protected:KIoRange? m_IoPortRange0;? / 管理I/O資源KInterrupt? m_Irq;? / 管理中斷資源;在實際操作過程中,采用中斷讀數(shù)的方法。在驅(qū)動程序中設(shè)置了兩個緩沖區(qū),一個前臺緩沖區(qū),一個后臺緩沖區(qū)(用作后備緩沖區(qū)),系統(tǒng)總是先使用前臺緩沖區(qū)。當(dāng)前臺緩沖區(qū)已滿而仍然未被讀出,系統(tǒng)觸發(fā)中斷時,此時使用后臺緩沖區(qū)。讀數(shù)的方法很簡單,系統(tǒng)先讀前臺緩沖區(qū)的數(shù)據(jù),只有當(dāng)前臺緩沖區(qū)未滿而后臺緩沖區(qū)滿的時候才讀后臺緩沖區(qū)。這樣可以保證采樣數(shù)據(jù)序列的時間順序。具體實現(xiàn)如下
16、:/ ISR例程,完成數(shù)據(jù)從FIFO中讀出BOOLEAN AC_1810Device:Isr_Irq(void)/ 是否觸發(fā)中斷?未觸發(fā)則返回,判斷兩個緩沖區(qū)情況,都滿則返回/ 前臺緩沖區(qū)未滿,使用前臺緩沖區(qū)if(m_pBuffer->numused < MAX_READ_BUF )? ? for( int i = 0;i < BLOCK_SIZE; i+)? m_pBuffer->buffm_pBuffer->numused+i? =READ_FIFO;? m_pBuffer->numused += BLOCK_SIZE;else / 完成其它情況的判斷r
17、eturn TRUE; / 中斷成功返回當(dāng)應(yīng)用程序使用標(biāo)準(zhǔn)Win32 API對設(shè)備進(jìn)行讀操作的時候,I/O管理器通知驅(qū)動程序并觸發(fā)對Read函數(shù)的調(diào)用。對于通常的串行設(shè)備,在Read函數(shù)的最后排隊IRP請求,此時系統(tǒng)就可以觸發(fā)StartIO例程,并且保證這個過程是串行處理的。/ 讀例程,處理IRP_MJ_READNTSTATUS AC_1810Device:Read(KIrp I) / 檢查輸入的合法性? if ( I.ReadSize()< BLOCK_SIZE ) ? / 不合法返回錯誤代碼? I.Information() = 0;? return I.PnpComplete(th
18、is, ? STATUS_INVALID_PARAMETER);/ 讀0字節(jié),永遠(yuǎn)成功if (I.ReadSize() = 0)? I.Information() = 0;? return ? I.PnpComplete(this, STATUS_SUCCESS);? / 排隊這個IRP觸發(fā)StartIO,完成數(shù)據(jù)傳輸return QueueIrp(I, LinkTo(CancelQueuedIrp);/ StartIo例程,完成I/O操作VOID AC_1810Device:StartIo(KIrp I)/ 檢測這個IRP是否被取消? if (!I.TestAndSetCancelRoutine(LinkTo(CancelQueuedIrp),NULL,CurrentIrp() )? ? return; / 取消則返回? ? switch (I.MajorFunction()? case IRP_MJ_READ:? /這個函數(shù)按邏輯完成讀操作? SerialRead(I); ? break;? ? / 開始處理下一個IRP? PnpNextIrp(I); ? break;ISA卡的WDM驅(qū)動程序的主體部分就完成了。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙教版2024-2025學(xué)年七下數(shù)學(xué)期末模擬練習(xí)卷-學(xué)生用卷
- 陜西省西安市遠(yuǎn)東第二中學(xué)2024-2025學(xué)年八年級下學(xué)期5月月考道德與法治試卷(無答案)
- 工業(yè)廢棄物處理與污染防治
- 工業(yè)旅游視角下的現(xiàn)代廠區(qū)建設(shè)
- 工業(yè)機(jī)器人系統(tǒng)設(shè)計與應(yīng)用研究
- 工業(yè)機(jī)器人與數(shù)控技術(shù)的融合
- 工業(yè)機(jī)器人技術(shù)及其電機(jī)控制策略
- 工業(yè)污染監(jiān)測與控制技術(shù)
- 工業(yè)污染防治的新技術(shù)動態(tài)
- 工業(yè)污染防治措施與標(biāo)準(zhǔn)
- 大學(xué)生心理健康教育導(dǎo)論
- 河南省洛陽市2024-2025學(xué)年高二下學(xué)期6月期末質(zhì)檢物理試卷(含答案)
- 浙江理工大學(xué)《統(tǒng)計學(xué)與R語言》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年廣西壯族自治區(qū)林業(yè)局直屬事業(yè)單位筆試題庫帶答案分析
- 公司社保掛靠管理制度
- 市政道路施工的安全措施與管理
- 2024年江蘇理工學(xué)院招聘專職輔導(dǎo)員真題
- 小學(xué)英語教育教學(xué)論文大全
- 2025年全省民政行業(yè)職業(yè)技能大賽(孤殘兒童護(hù)理員)備考試題庫(含答案)
- 食堂保溫箱管理制度
- 風(fēng)電場預(yù)警管理制度
評論
0/150
提交評論