www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]Windows 2000內核模式驅動程序設計

摘要:介紹了Windows2000驅動程序模型的基本結構、設計和開發(fā)的基本問題。并以PCI接口的ATM信令接口卡開發(fā)的驅動程序部分為例,簡單介紹了驅動程序開發(fā)的方法和步驟.并介紹了驅動程序開發(fā)環(huán)境的設置及編譯方法。這種內核模式驅動程序設計的開發(fā)過程得到了簡化,并降低了其復雜性。

關鍵詞:Windows2000;驅動程序模型;ATM信令接口

0引言

設備驅動程序是直接同硬件打交道的軟件模塊。在Windows2000中,微軟公司在WindowsNT4.0的驅動程序結構基礎上,同時引入了Windows9X的即插即入特性,推出了新的驅動程序結構模式(WDM)。WDM通過提供一種靈活的方式來簡化驅動程序的開發(fā),在實現(xiàn)對新硬件支持的基礎上減少并降低所必須開發(fā)的驅動程序的數(shù)量和復雜性。在Windows2000中的驅動程序可以分為2大類:用戶模式驅動程序和內核模式的驅動程序。用戶模式驅動程序是與子系統(tǒng)特定相關的,它包含了Win32多媒體驅動程序、支持MS-DOS應用程序的虛擬設備驅動程序VDD(VirtualDeviceDriver)。內核模式驅動程序有3種基本類型,每一種都有稍微不同的結構和完全不同的功能,即最高層驅動程序(如文件系統(tǒng)驅動程序(FSD))、中間層驅動程序(例如虛擬磁盤、鏡像或設備類型特定的外圍設備)、底層驅動程序(例如PnP硬件總線驅動程序)。在Windows2000操作系統(tǒng)下的驅動程序開發(fā)分為3個主要的領域:WDM驅動程序、文件系統(tǒng)驅動程序和小端口驅動程序,見圖1。其中小端口驅動程序針對的是顯示設備、SCSI和網(wǎng)絡設備等特定領域;文件系統(tǒng)驅動程序針對的是存儲設備;WDM驅動程序針對的則是計算機應用系統(tǒng)開發(fā)所面對的大多數(shù)情況。本文我們討論了WDM內核模式的驅動程序設計的一般問題,雖然其他類型驅動程序與WDM內核模式驅動程序開發(fā)有所不同,但只要掌握了WDM內核模式驅動程序開發(fā)的基礎,結合2種基本類型的本身特點,就能夠很快掌握設計方法。

1WDM的基本原理

WDM是一個模塊化的、分層次類型的微型驅動程序結構,層次結構如圖2所示,其中左邊是一個設備對象堆棧,右邊為驅動程序的分層結構。在WDM驅動程序模型中,每個硬件至少要包含功能驅動程序和總線驅動程序2個層??偩€驅動程序為總線上發(fā)現(xiàn)的每個設備創(chuàng)建物理設備對象PDO,每個功能設備驅動程序創(chuàng)建自己的功能設備對象FDO。在驅動程序中不是直接操作硬件,而是操作相應的PDO與FDO。來自用戶模式API的I/O請求包(IRP)送到設備堆棧的最上層驅動程序,然后逐漸過濾到下層的驅動程序。每一層驅動程序都可以決定如何處理IRP。內核模式的WDM驅動程序有著可移植性、可配置性、基于對象、包驅動等共有的屬性。

用戶態(tài)程序和內核通過設備對象訪問設備驅動程序的設備。WDM驅動程序有2種方法提供

Win32程序可用的名稱,舊的方法是在驅動程序的設備創(chuàng)建時,通過函數(shù)IoCreate-SymbolicLink創(chuàng)建一個符號鏈接名,新的方法是使用128位的設備接口標識(GUID)。在驅動程序編寫中,該GUID可以通過Windows提供的guidgen.exe工具生成。

2WDM驅動程序的結構及設計

內核模式的驅動程序不同于常規(guī)的應用程序,可以把一個完整的驅動程序看作是一個容器,它包含許多例程,當操作系統(tǒng)遇到一個IRP時,它就調用這個容器中的例程來執(zhí)行該IRP的各種操作。圖3表示了這一概念。在每一個WDM驅動程序中,都必須擁有DriverEntry、AddDevice、DispatchPnP、DispatchPower和DispatchWmi這5個例程,其他的例程則是可選的。需要對IRP排隊的驅動程序一般都有一個StartIo例程,執(zhí)行DMA傳輸?shù)尿寗映绦驊幸粋€AdapterControl例程。大部分能生成硬件中斷的設備,其驅動程序都有一個中斷服務例程(ISR)和一個延遲過程調用(DpcForIsr)例程。驅動程序一般都有幾個支持不同類型IRP的分發(fā)例程。WDM驅動程序開發(fā)者的主要任務就是為如圖3所示的容器選擇,并完成所需要的例程。

當I/O管理器裝入驅動程序時,它調用每個驅動程序必須有的DriverEntry例程,以用來初始化驅動程序范圍的數(shù)據(jù)結構和資源。一般來說,在DriverEntry例程中通常完成以下功能:①找到所要控制的硬件;②在驅動程序對象中設置驅動程序的Dispatch-,AddDevice,Startio(如果有)和UN-LOAD(如果有)等分發(fā)例程的程序的入口點;③建立所有驅動程序對象或其他系統(tǒng)資源;④返回的NTSTATUS表明驅動程序是否成功裝入,并能接收和處理來自PnP管理器的配置、增加(AddDevice)及啟動其設備的請求。對于功能驅動程序,AddDevice函數(shù)的基本職責是創(chuàng)建一個設備對象并把它聯(lián)接到以PDO為底的設備堆棧中。分發(fā)(Dispatch)例程是設備驅動程序提供的主要函數(shù)。當被調用去執(zhí)行一個I/O操作時,Windows2000通過實現(xiàn)Dispatch例程來處理來自用戶模式應用程序的請求或來自系統(tǒng)的其他地方的請求。

一個完整的驅動程序要完成以下工作:初始化;創(chuàng)建與刪除設備;處理應用層程序的打開和關閉句柄的請求;處理應用層程序的輸入/輸出請求;串行化對設備的訪問;訪問硬件;調用其他驅動程序;取消I/O請求;處理可熱插拔設備的加入和刪除事件;電源管理和WMI;對能夠產生中斷的設備進行中斷處理。

操作系統(tǒng)使用I/O請求包(IRP)的數(shù)據(jù)結構與內核模式驅動程序通信。IRP是一個內核對象,它是一個預先定義的數(shù)據(jù)結構,帶有一組對它進行操作的I/O管理器例程。I/O管理器接收一個I/O請求后分配并初始化一個IRP。一個IRP有一個固定的首部和可變數(shù)目的IRP堆棧單元塊,每個堆棧單元塊都對應一個將處理該IRP的驅動程序,因此這些堆棧塊至少應與驅動程序堆棧中將要處理這一請求的驅動程序數(shù)目一樣多。每個I/O請求有一個主功能代碼(IRP_MJ_XXX),并可能有次功能代碼(IRP_MN_XXX)。主功能代碼決定了該I/O請求調用的分發(fā)例程的驅動程序入口點。分發(fā)例程接收到I/O請求后進行如下處理:確認I/O請求的合法性;盡可能在分發(fā)例程中直接完成該I/O請求;如果該請求不能在驅動程序的分發(fā)例程中被處理完,驅動程序就把這個請求排進隊列,以便以后完成處理。WDM驅動程序提供了2種I/O請求排隊的方法:I/O管理器管理的系統(tǒng)排隊和驅動程序自己管理的驅動程序排隊。[!--empirenews.page--]

在Windows2000和Windows98中,通過使用總線驅動程序,PnP管理器能夠自動檢測硬件和分配I/O資源。在WDM驅動程序中PnP管理器使用主功能代碼為IRP-MJ-PNP的I/O請求包與設備驅動程序交換信息和請求,完成對硬件設備的檢測和配置工作。PnP請求包完成2種功能:指示驅動程序何時又如何配置和取消硬件及驅動程序本身的設置;指導驅動程序完成一系列的狀態(tài)轉換。PnP請求可以包含二十多個次功能代碼,部分功能代碼(如IRP-READ-CONFIG,IRP-MN-QUERY-RE-SOURCE-REQUIREMENTS等)只能由總線驅動程序處理,功能驅動程序和過濾驅動程序只是將該IRP請求下傳到總線驅動程序。對功能驅動程序和過濾驅動程序中比較重要的IRP-MN-START-DEVICE用來通知功能驅動程序其硬件被賦予了什么的I/O資源,以及指導功能驅動程序做任何必要的硬件或軟件設置,以便設備能正常工作。IRP-MN-REMOVE-DEVICE告訴功能驅動程序關閉設備并釋放與之關聯(lián)的設備對象。

驅動程序的ISR和DpcForIsr在設備產生中斷時共同向設備提供服務。當設備產生中斷時,驅動程序的ISR將被調用,ISR通過詢問設備硬件收集有關的硬件設備信息,并盡可能地處理,如果不可能完全處理該中斷請求,就將中斷信息傳遞給Dpc-ForIsr進行處理。ISR是運行在DIRQL中斷請求級的,在運行時,會阻止在同一處理器上的所有設備發(fā)出的具有更低的DIRQL的中斷,因此在驅動程序的編寫時,ISR應盡可能快地返回控制。另外,ISR可以與驅動程序的其它部分共享數(shù)據(jù)和硬件資源,因此需要注意同步問題的處理。

3WDM驅動程序開發(fā)環(huán)境及編譯

Windows2000下編寫驅動程序的環(huán)境被稱為DDKForMicrosoftWindows2000或Windows2000DDK,DDK是一個命令行下的工作環(huán)境。在安裝DDK前需要先安裝Micro-softVisualC++和Win32SDK(可選)。對驅動程序的編譯可以通過設置VC++的項目設置,在VC++中直接編譯驅動程序,但改變設置的工作較繁且易出錯,因此DDKbuild.exe編譯聯(lián)接器是構造驅動程序的主要工具。它從配置文件Sources中讀出待編譯的程序的配置,包括源文件、目標文件等,從環(huán)境變量Include中得到引用文件的地址,然后調用VisualC++的編譯聯(lián)接器Nmake.exe進行實際的編譯聯(lián)接工作。

另外,build編譯聯(lián)接器還可以通過查看DIRS文件中的偽指令,確定要編譯的驅動程序目錄列表。日志文件build.log、build.wrn,build.err中分別記錄了編譯聯(lián)接中執(zhí)行的命令行、遇到的錯誤和警告。編譯完成后的文件后綴為.sys。

驅動程序的調試是在原代碼級進行的,可以用微軟公司提供的WinDbg調試工具,但需要在兩臺以串口聯(lián)接的計算機上進行。而NUMEGA公司的SOFTICE比較方便地在一臺計算機上進行核心代碼的調試。

4ATM信令接口卡的驅動例程分析

我們開發(fā)的ATM信令接口卡硬件符合PCI2.1標準,其與應用程序的數(shù)據(jù)傳輸為DMA方式。主要部分代碼如下。

在該驅動程序入口部分中我們完成了各個分發(fā)例程入口的設置工作。

AtmPnp例程中完成對硬件資源的的檢測和配置工作,并且初始化請求隊列,獲得完成DMA傳輸?shù)腄MA適配器對象,掛接中斷處理對象等功能。

在AddDevice函數(shù)調用IoCreateDevice函數(shù)中創(chuàng)建一個設備對象,并通過調用IoAttachDe-viceToDeviceStack把它聯(lián)接到以PDO為底的設備堆棧中。

在PnP例程中對IRP-MN-START-DEVICE的處理代碼如下。

在處理中斷資源時給出的IoConnectInterrupt函數(shù)掛接了中斷處理函數(shù)AtmHandlerInter-rupt。

其他函數(shù)實現(xiàn)不再一一介紹。在具體實現(xiàn)的數(shù)據(jù)的傳輸、工作模式的設置等功能與所使用的硬件的寄存器的工作模式有關。在設計的過程中,應該注意每個例程的運行中斷級。在處理I/O請求時,應根據(jù)硬件的特性和API的要求決定IRP隊列的方式及取消IRP的例程的編寫。

在編寫驅動程序前,應該盡量了解硬件本身。這包括硬件的總線結構、控制寄存器的訪問方式、中斷行為、數(shù)據(jù)傳輸機制和設備內存等。

5小結

驅動程序的編寫是較復雜的過程,因驅動程序是操作系統(tǒng)信任的組件,任何細小的錯誤可能引起操作系統(tǒng)的崩潰,在驅動程序編寫過程中,應該反復測試所寫的代碼,并遵循驅動程序的規(guī)則??傊_發(fā)驅動程序的工作與開發(fā)Windows應用程序開發(fā)是完全不同的,且與驅動程序緊密相連的硬件都有自己的硬件和軟件規(guī)范,本文從一般驅動程序概念出發(fā),給出了驅動程序的總體描述和組成部分,并以部分例程代碼為例給出了驅動程序的基本組成結構和注意問題。要想能夠很好掌握驅動程序開發(fā),最根本是閱讀DDK文檔并實踐編寫驅動程序。[!--empirenews.page--]

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉