ISA數(shù)據(jù)采集卡的WDM驅(qū)動程序?qū)崿F(xiàn)
發(fā)布時間:2007/8/29 0:00:00 訪問次數(shù):575
摘要:ISA設(shè)計(jì)在WINOWS新的驅(qū)動程序模型WDM(WINDOWS DRIVER MODEL)中沒有獲得很好的支持,使用WDM實(shí)現(xiàn)需要一些特殊處理。主要討論老式ISA設(shè)備的WDM驅(qū)動程序的設(shè)計(jì)與實(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提供硬件支持的ISA設(shè)備。為這類硬件編寫非WDM驅(qū)動程序只能局部支持PNP特性,而且需要做大量額外的工作如:必須檢測硬件,為硬件創(chuàng)建設(shè)備對象(用于代表硬件),配置并初始化硬件使其正常工作,這些工作非常復(fù)雜。利用WDM可以避免這些麻煩。
1 WDM的結(jié)構(gòu)
WDM實(shí)際上是一個編寫驅(qū)動程序的規(guī)范。其驅(qū)動程序結(jié)構(gòu)的特點(diǎn)和WINDOWS程序設(shè)計(jì)的消息驅(qū)動機(jī)制很相像,采用IRP驅(qū)動機(jī)制。WINDOWS 98和WINDOWS 2000處理IRP的方式一樣,本質(zhì)卻完全不同。
WINDOWS 2000主要由I/O管理器來管理驅(qū)動程序的行為,管理的方法就是給驅(qū)動程序發(fā)送各種IRP,同時I/O管理器還負(fù)責(zé)傳遞這個設(shè)備的用戶請求給驅(qū)動程序。驅(qū)動程序不能直接操作硬件設(shè)備,而是通過一個叫做HAL(硬件設(shè)備抽象層)的層來訪問底層設(shè)備。HAL完成對各種硬件差異的屏蔽。Windows 98內(nèi)核與Windows 2000內(nèi)核有很大的差別。Windows 98操作系統(tǒng)的內(nèi)核稱為虛擬機(jī)管理器(VMM)。虛擬設(shè)備驅(qū)動程序(VxD)則使設(shè)備虛擬化,從而與虛擬機(jī)管理器形成虛擬機(jī)。Windows 9x的內(nèi)核不支持IRP,它通過模擬的方法支持WDM和IRP。Windows 98包含了NTKERN.VXD(VMM32.VXD)系統(tǒng)模塊,該模塊含有大量Windows NT內(nèi)核支持函數(shù)的Windows實(shí)現(xiàn)。NTKERN.VXD使用與Windows 2000相同的方式創(chuàng)建IRP并發(fā)送IRP到WDM驅(qū)動程序。也就是說,Windows 98是使用VxD技術(shù)實(shí)現(xiàn)WDM的。盡管Windows 98和Windows 2000的內(nèi)核完全不同,但是WDM的結(jié)構(gòu)在Windows 98和2000下可以認(rèn)為是完全相同的。
WDM驅(qū)動程序面對的主要內(nèi)容是一系列內(nèi)核驅(qū)動對象。這些對象包括驅(qū)動對象、設(shè)備對象,還有一系列的資源抽象對象如中斷對象、適配器對象(處理DMA操作)、內(nèi)核模式派發(fā)器對象、控制器對象、推遲過程對象、定時器對象、設(shè)備隊(duì)列對象、回調(diào)對象等。其中驅(qū)動對象由I/O管理器負(fù)責(zé)創(chuàng)建和管理。設(shè)備對象代表用戶需要操作的物理或者是邏輯設(shè)備。設(shè)備對象負(fù)責(zé)管理自己設(shè)備所需要的各種資源對象。這些資源對象有的代表真正的物理設(shè)備如中斷對象、適配器對象、定時器對象;有的對象則是邏輯對象,它們是操作系統(tǒng)實(shí)現(xiàn)自己的特性所必需的,如推遲過程調(diào)用就是與操作系統(tǒng)的搶占式多任務(wù)的實(shí)現(xiàn)有關(guān)。WDM驅(qū)動程序利用IRP和這些對象完成硬件設(shè)備的抽象化,并對應(yīng)用程序提供統(tǒng)一操作接口。這就是所謂的WDM規(guī)范。
WDM驅(qū)動程序的結(jié)構(gòu)很簡單。它的主體是一個入口函數(shù)DriverEntry。DriverEntry的第一個參數(shù)是指針,指向一個剛被初始化的驅(qū)動程序?qū)ο,該對象代表?qū)動程序。WDM驅(qū)動程序的DriverEntry例程完成這個對象的初始化并返回。WDM驅(qū)動程序的DriverEntry例程的主要工作是把各種函數(shù)指針填入驅(qū)動程序?qū)ο。這些指針對操作系統(tǒng)指明了驅(qū)動程序容器中各種子例程的位置。它包括下面這些指針成員:
·DriverUnload指向驅(qū)動程序的清除例程。I/O管理器會在卸載驅(qū)動程序前調(diào)用該例程。通常WDM驅(qū)動程序的DriverEntry例程一般不分配任何資源,所以DriverUnload例程也沒有什么清除工作要做。
摘要:ISA設(shè)計(jì)在WINOWS新的驅(qū)動程序模型WDM(WINDOWS DRIVER MODEL)中沒有獲得很好的支持,使用WDM實(shí)現(xiàn)需要一些特殊處理。主要討論老式ISA設(shè)備的WDM驅(qū)動程序的設(shè)計(jì)與實(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提供硬件支持的ISA設(shè)備。為這類硬件編寫非WDM驅(qū)動程序只能局部支持PNP特性,而且需要做大量額外的工作如:必須檢測硬件,為硬件創(chuàng)建設(shè)備對象(用于代表硬件),配置并初始化硬件使其正常工作,這些工作非常復(fù)雜。利用WDM可以避免這些麻煩。
1 WDM的結(jié)構(gòu)
WDM實(shí)際上是一個編寫驅(qū)動程序的規(guī)范。其驅(qū)動程序結(jié)構(gòu)的特點(diǎn)和WINDOWS程序設(shè)計(jì)的消息驅(qū)動機(jī)制很相像,采用IRP驅(qū)動機(jī)制。WINDOWS 98和WINDOWS 2000處理IRP的方式一樣,本質(zhì)卻完全不同。
WINDOWS 2000主要由I/O管理器來管理驅(qū)動程序的行為,管理的方法就是給驅(qū)動程序發(fā)送各種IRP,同時I/O管理器還負(fù)責(zé)傳遞這個設(shè)備的用戶請求給驅(qū)動程序。驅(qū)動程序不能直接操作硬件設(shè)備,而是通過一個叫做HAL(硬件設(shè)備抽象層)的層來訪問底層設(shè)備。HAL完成對各種硬件差異的屏蔽。Windows 98內(nèi)核與Windows 2000內(nèi)核有很大的差別。Windows 98操作系統(tǒng)的內(nèi)核稱為虛擬機(jī)管理器(VMM)。虛擬設(shè)備驅(qū)動程序(VxD)則使設(shè)備虛擬化,從而與虛擬機(jī)管理器形成虛擬機(jī)。Windows 9x的內(nèi)核不支持IRP,它通過模擬的方法支持WDM和IRP。Windows 98包含了NTKERN.VXD(VMM32.VXD)系統(tǒng)模塊,該模塊含有大量Windows NT內(nèi)核支持函數(shù)的Windows實(shí)現(xiàn)。NTKERN.VXD使用與Windows 2000相同的方式創(chuàng)建IRP并發(fā)送IRP到WDM驅(qū)動程序。也就是說,Windows 98是使用VxD技術(shù)實(shí)現(xiàn)WDM的。盡管Windows 98和Windows 2000的內(nèi)核完全不同,但是WDM的結(jié)構(gòu)在Windows 98和2000下可以認(rèn)為是完全相同的。
WDM驅(qū)動程序面對的主要內(nèi)容是一系列內(nèi)核驅(qū)動對象。這些對象包括驅(qū)動對象、設(shè)備對象,還有一系列的資源抽象對象如中斷對象、適配器對象(處理DMA操作)、內(nèi)核模式派發(fā)器對象、控制器對象、推遲過程對象、定時器對象、設(shè)備隊(duì)列對象、回調(diào)對象等。其中驅(qū)動對象由I/O管理器負(fù)責(zé)創(chuàng)建和管理。設(shè)備對象代表用戶需要操作的物理或者是邏輯設(shè)備。設(shè)備對象負(fù)責(zé)管理自己設(shè)備所需要的各種資源對象。這些資源對象有的代表真正的物理設(shè)備如中斷對象、適配器對象、定時器對象;有的對象則是邏輯對象,它們是操作系統(tǒng)實(shí)現(xiàn)自己的特性所必需的,如推遲過程調(diào)用就是與操作系統(tǒng)的搶占式多任務(wù)的實(shí)現(xiàn)有關(guān)。WDM驅(qū)動程序利用IRP和這些對象完成硬件設(shè)備的抽象化,并對應(yīng)用程序提供統(tǒng)一操作接口。這就是所謂的WDM規(guī)范。
WDM驅(qū)動程序的結(jié)構(gòu)很簡單。它的主體是一個入口函數(shù)DriverEntry。DriverEntry的第一個參數(shù)是指針,指向一個剛被初始化的驅(qū)動程序?qū)ο螅搶ο蟠眚?qū)動程序。WDM驅(qū)動程序的DriverEntry例程完成這個對象的初始化并返回。WDM驅(qū)動程序的DriverEntry例程的主要工作是把各種函數(shù)指針填入驅(qū)動程序?qū)ο。這些指針對操作系統(tǒng)指明了驅(qū)動程序容器中各種子例程的位置。它包括下面這些指針成員:
·DriverUnload指向驅(qū)動程序的清除例程。I/O管理器會在卸載驅(qū)動程序前調(diào)用該例程。通常WDM驅(qū)動程序的DriverEntry例程一般不分配任何資源,所以DriverUnload例程也沒有什么清除工作要做。
熱門點(diǎn)擊
- 嵌入式系統(tǒng)硬件抽象層的原理與實(shí)現(xiàn)
- 利用XPS工具快速生成Virtex FPGA
- 在MC68HC908GP32上移植μC/OS
- 交流異步電動機(jī)矢量控制系統(tǒng)的嵌入式設(shè)計(jì)
- 便攜系統(tǒng)中微處理器功耗的設(shè)計(jì)考慮
- 嵌入式瀏覽器Konqueror/E的實(shí)現(xiàn)
- 在Windows環(huán)境下調(diào)用動態(tài)庫實(shí)現(xiàn)VXI嵌
- 使用LeonardoSpectrum綜合Xi
- Nios SoC系統(tǒng)中的BCH編解碼IP核的
- 基于TS101的嵌入式實(shí)時操作系統(tǒng)設(shè)計(jì)
推薦技術(shù)資料
- 羅盤誤差及補(bǔ)償
- 造成羅盤誤差的主要因素有傳感器誤差、其他磁材料干擾等。... [詳細(xì)]
- AMOLED顯示驅(qū)動芯片關(guān)鍵技
- CMOS圖像傳感器技術(shù)參數(shù)設(shè)計(jì)
- GB300 超級芯片應(yīng)用需求分
- 4NP 工藝NVIDIA Bl
- GB300 芯片、NVL72
- 首個最新高端芯片人工智能服務(wù)器
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究