




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、windows nt環(huán)境下fddi網卡驅動程序設計前言indsnt是一個功能全面的操作系統(tǒng),具有完全集成式的連網能力,它的網絡模型開始于a子層,網絡接口卡(netrkinterfaeard以后簡稱網卡或ni)驅動程序駐留在其中。通過相關的網卡把indsnt與網絡連接起來,但一直到80年代后期,許多傳輸協(xié)議的實現受限于a層接口的獨特實現,因為a層定義了協(xié)議與網卡之間的轉換機制。1989年,irsft和3兩公司提出了一個定義a層與si模型高層協(xié)議驅動程序之間的網絡設備接口規(guī)范(netrkdevieinterfaespeifiatin:ndis),ndis給數據交換提出了一個靈活的環(huán)境,它規(guī)范了軟件
2、接口稱為ndis接口,傳輸協(xié)議可用它與網卡驅動程序進行通信。因此在indsnt環(huán)境下開發(fā)核心態(tài)網卡驅動程序應遵循ndis規(guī)范。對于高速網絡fddi(fiberdistributeddatainterfae)網卡驅動程序還需要st(statinanageent)站管理功能的實現,否則將不能作為一個fddi站連入環(huán)結構中,只能實現點到點間的數據通信。故有必要將st軟件移植到網卡驅動程序中,這將又導致對iniprtni驅動程序編程框架的破壞,于是有必要形成fddi網卡驅動程序(包含st)與indsnt操作系統(tǒng)的良好接口由邏輯網卡的注冊和a層驅動程序的初始化來完成。所以,本課題旨在深入研究應用irsf
3、t公司的ddk(deviedriverkit)將st移植于indsnt的fddi網卡驅動程序過程中如何注冊iniprtni驅動程序。即怎樣正確注冊邏輯網卡和a驅動程序的初始化。著重討論與初始化相關的上邊緣函數的使用和調用關系以及初始化過程中遇到的各種問題的具體解決。第一章indsnt環(huán)境下fddi網卡驅動程序總體結構介紹第一節(jié)indsnt網絡結構1.1.1indsnt網絡體系結構indsnt的網絡體系結構是基于國際標準化(is)制定的標準模型開放式系統(tǒng)互連(pensysteinternnetin:si)參考模型分層建立的,這種方式有利于隨時擴展其它功能和服務。indsnt網絡模型開始于a子層,
4、網卡驅動程序就駐留在其中。它通過相關的網卡把indsnt與網絡連接起來,圖中的多個網卡表明在一臺運行indsnt的計算機上能使用多種網卡。這一網絡體系結構包括兩個重要接口ndis接口與傳輸驅動程序接口(tdi)。這兩個接口把兩個層隔離開來,辦法是相鄰的部件只允許按單一的標準來寫,不允許多重標準。例如一個網卡驅動程序(在ndis接口的下面)就不需要特地按每個傳輸協(xié)議來寫它的代碼塊,恰恰相反,該驅動程序是寫給ndis接口的,它通過符合ndis的相應傳輸協(xié)議來請求服務。這些接口包含在indsnt的網絡體系結構中,以容納可移植、可互換的模塊。在兩個接口之間,是傳輸協(xié)議。它在網絡中起著組織者的作用。一個
5、傳輸協(xié)議規(guī)定了數據以何種方式呈遞給下一個接收層,以及如何對數據相應地進行打包。它通過ndis把數據傳給網卡驅動程序,并通過tdi把數據傳給轉發(fā)程序(rediretr)tdi之上是轉發(fā)程序,它把本地的網絡資源申請轉送給網絡。為了能和其他廠商的網絡互連,indsnt允許有多個轉發(fā)程序。對于每一個轉發(fā)程序indsnt計算機必須也有一個相應的供應者(prvider)(由網絡廠商提供)。多供應者路由選擇程序決定適當的供應者,然后借助于供應者,對應用請求到相應的轉發(fā)程序做出選擇。1.1.2indsnt網絡驅動程序indsnt支持兩種類型的網絡驅動程序傳輸驅動程序實現數據鏈路層中的邏輯鏈路控制子層協(xié)議和傳輸
6、層協(xié)議。向下與ndis接口,向上與tdi接口。網卡驅動程序實現對物理層的管理和數據鏈路層中介質訪問控制子層協(xié)議,通過ndis向下管理物理網卡,向上與傳輸驅動程序通信。1.1.3indsnt網卡驅動程序indsnt環(huán)境下的網卡驅動程序也分為兩種:iniprt網卡驅動程序:iniprt驅動程序只須實現與網絡硬件相關的操作(包括發(fā)送和接收)。而所有底層網卡驅動程序的通用操作(如同步),一般由ndis接口程序來實現。full網卡驅動程序:full網卡驅動程序必須實現所有硬件相關和同步、排隊等操作。例如full網卡驅動程序為了響應數據接收,需要保持本身的捆綁信息,而iniprt就可以由ndis接口庫來實
7、現。在indsnt的早期版本中,full網卡驅動程序要求開發(fā)者實現許多底層操作,來處理多處理器的核心問題以及處理器、線程的同步,這樣不同的開發(fā)者在大量重復著許多相同的工作。而iniprt網卡驅動程序允許開發(fā)者僅僅寫一些與網絡硬件相關的代碼即可,而那些通用的函數由ndis接口庫來實現,這樣開發(fā)出來的驅動程序減少了不必要的工作。第二節(jié)iniprt驅動程序的結構ndis接口規(guī)范了網卡驅動程序的實現,同時也對tdi驅動程序的實現提出了一定的要求,在nt中,ndis約束下的網卡驅動程序、tdi驅動程序和系統(tǒng)的關系如下圖所示:圖2.0ndis約束下的網卡驅動程序、tdi驅動程序和系統(tǒng)的關系iniprt驅動
8、程序包括驅動程序對象、驅動程序源代碼和ndis接口庫代碼。indsntddk提供ndis.h作為iniprt驅動程序的主要頭文件,定義了iniprt驅動程序的入口點、ndis接口庫函數和通用數據結構。上邊緣函數的作用是網卡驅動與ndis接口庫進行通信,而下邊緣函數是tdi協(xié)議驅動程序與ndis通信的手段。1.2.1iniprt網卡對象ndis用一個叫做邏輯網卡的軟件對象來描述系統(tǒng)中的每塊網卡,而邏輯網卡與indsnt設備對象的通信由i/子系統(tǒng)來管理,描述網卡的設備對象包括相關的網絡信息如名字、網絡地址和網卡內存基地址等,它還包含與硬件相關的驅動程序狀態(tài)數據(捆綁數目,捆綁句柄,包過濾數據庫等)
9、。ndis分配一個句柄到iniprtinitialize這個上邊緣函數的一個結構中,然后iniprt網卡驅動程序將在以后提供這個句柄來給ndis調用,這個結構一直被ndis保持,并且對iniprt驅動程序不透明。當iniprt網卡驅動程序初始化一塊網卡時,它創(chuàng)立自己的內部數據結構來描述網卡,記錄需要它管理的與設備相關的狀態(tài)信息。當iniprt網卡驅動程序調用ndissetatttibutes或ndissetattributesex兩ndis庫函數時,它傳遞一個句柄給這數據結構。這樣,當調用iniprt驅動程序入口點時,它就傳遞這個句柄來驗證驅動程序所對應的網卡的正確性。這個數據結構為inipr
10、t網卡驅動程序所擁有并維護。1.2.2網絡對象標識符iniprtni驅動程序還需要維護一組對象,這些對象是系統(tǒng)定義的對象標識符(bjetidetifier:id)來標識,以描述驅動程序的性能和當前狀態(tài)信息。為查詢這些信息,上層驅動程序調用ndisrequest向ndis接口庫指示id。id表示了調用所需的信息類型,如iniprt驅動程序所支持的lkahead緩沖區(qū)大小等。ndis接到上層驅動程序的查詢請求,將id傳遞給上邊緣函數iniprtqueryinfratin實現對id的查詢,如果上層驅動程序請求改變狀態(tài)信息則調用iniprtsetinfratin實現對id的設置。1.2.3iniprt
11、網卡驅動程序代碼典型的iniprtni驅動程序必須有一些函數來通過ndis接口實現上層驅動程序與硬件的通信。這些函數稱為上邊緣服務函數。這些上邊緣服務函數由驅動程序的開發(fā)者根據驅動程序面向的特定低層網絡類型和硬件以及相應環(huán)境,可以有選擇地實現,但必須保證驅動程序最基本的功能,這些基本功能包括初始化、發(fā)送、中斷處理、重置、參數查詢與設置和報文接收。iniprtinitialize:操作系統(tǒng)根據系統(tǒng)配置信息,檢測出網卡已安裝時,由ndis接口在初始化時調用,主要完成低層網絡類型確定,對應于物理網卡的邏輯網卡初始化,中斷信息注冊,網卡與主機通訊方式的確認。i/端口的申請與注冊,內存映像,ib的初始化
12、,物理網卡的驗證與初始化等。iniprtrenfigure:支持網卡參數動態(tài)變化,和iniprtinitilize一樣由ndis接口以初始化級別調度執(zhí)行(不能屏蔽中斷,必須由驅動程序承認并清除在此期間產生的中斷),支持即插即用和軟配置的網卡在動態(tài)改變參數時,必須提供此函數。iniprtqueryinfratin:查詢網卡的狀態(tài)以及網卡驅動程序的操作或統(tǒng)計參數,如是否支持組通訊、網卡的物理速率是否支持回環(huán)、是否支持直接拷貝等,這些參數以id方式統(tǒng)一管理。iniprtsetinfratin:ndis接口或協(xié)議驅動程序通過調用此接口改變驅動程序維護的id庫,一些操作參數的改變也將同時改變驅動程序狀態(tài)
13、,例如組地址的設置。iniprtreset:包括網卡硬件重置和驅動程序軟件重置,軟件重置包括驅動程序狀態(tài)重置,以及一些相關的參數重置,還需考慮有些參數的恢復,重置時不必完成所有正在活躍的外部請求,但必須釋放已占用的外部資源。iniprthalt:掛起網卡并釋放該網卡驅動程序占用的所有資源,在此期間不屏蔽中斷。iniprtisr:高優(yōu)先級的中斷處理程序,進行的工作包括初始中斷處理類型,決定是否進行中斷轉交,對卡上中斷進行處理等,該服務類型只在以下情況被調用:ndis接口調用iniprtinitialize和iniprthalt兩函數時。中斷處理類型設為每此中斷處理過程都調用時。為使系統(tǒng)能及時響應
14、所有硬件中斷,高優(yōu)先級的硬件中斷處理程序應盡可能的減少運行時間,防止長時間的屏蔽低優(yōu)先級中斷,避免造程中斷丟失。iniprthandlEinterrupt:由中斷延時處理程序在中斷延時處理時進行調用。ndis排隊所有的延時處理,該服務主要處理發(fā)送完成、報文接收、描述符用勁溢出、網卡異常等中斷。iniprtsend:ndis收到上層發(fā)送請求時經過若干協(xié)議處理再向下調用此服務過程,發(fā)送的paket已含有l(wèi)l和a頭,該服務過程進行邊界對齊、paket約束重整、描述符映射和報文發(fā)送、以及發(fā)送資源和paket緩沖隊列管理。iniprttransferdata:多個已和網卡捆綁的協(xié)議驅動程序在接收到報文到
15、達指示后,向網卡驅動程序發(fā)出傳送請求以拷貝各自所需的報文數據部分,網卡驅動程序根據各協(xié)議驅動程序對單個paket是否進行多次拷貝,以決定是否暫存只允許單次拷貝的paket等。iniprthekhandle:ndis每秒調用此服務函數一次,驅動程序發(fā)現網卡異常時報告給ndis由ndis調用iniprtreset進行硬件重恢復。iniprtenableintrrupt:中斷使能。iniprtdisableinterrupt:中斷屏蔽。另外,每個網卡驅動程序必須有一個初始化入口點,由driverentry函數實現,它和系統(tǒng)相關,由操作系統(tǒng)在裝入驅動程序時調用,主要完成初始化ndisrapper,再由
16、rapper初始生成驅動程序管理塊并完成相應各種初始化工作,登錄網卡驅動程序所有上邊緣服務入口點,同時寫入ndis版本信息。1.2.4ndis接口庫ndis接口庫包括在ndis.sys中,它是一個核態(tài)函數庫,有一套抽象的函數,無論協(xié)議驅動程序還是ni驅動程序都連接到這個庫中,以實現上下層之間的操作。第二章fddi網卡驅動程序的加載和運行第一節(jié)網卡驅動程序的安裝indsnt網卡驅動程序安裝的目的是實現網卡相應硬件信息和驅動程序在indsnt注冊庫中的注冊,使indsnt能夠正確識別網卡,了解所必需的軟硬件信息并能在indsnt啟動時加載相應驅動程序。網卡驅動程序安裝時,首先在主群組的控制面板中選
17、擇“網絡”,然后添加網卡,指定相應信息文件esetup.inf的路徑,以完成以下兩個必要的操作:復制驅動程序到相應的系統(tǒng)目錄(indsnt根目錄syste32drivers)中;在indsnt注冊庫中存入相應軟硬件信息。下面主要以fddi網卡為例介紹安裝驅動程序所必需的工作:2.1.1網卡一般硬件參數對于fddi網卡,必須在編寫其esetup.inf文件時確定以下硬件參數:總線類型:pi(5)括號中的數字5表示pi總線在ndis中的總線類型代碼;廠商代號:0 x5588系統(tǒng)加載時確定網卡的標記,也是編程時確定pi槽號的標識;fid:0 x01;介質類型:光纖(3)括號中的數字表示光纖在ndis
18、中的介質類型代碼;是否支持全雙工:支持。對于其它的硬件信息在此inf配置信息文件中可有可無,如若配置,則可在驅動程序的編寫時利用這些信息,方便編程,同時有利于其它應用對其參數的確定和使用。2.1.2fddi網卡加載時需在注冊庫登錄表里做的網絡配置網卡驅動程序的安裝通常將創(chuàng)建登錄表中的四個不同子鍵:sftareregistrin鍵,對應于驅動程序,存在于hkey_lal_ahinesftarepanyprdutnaeversin中。我們的fddi網卡驅動程序所對應的是hkey_lal_ahinesftarenet612yhfddiyhfddi1.0;網卡的軟件登錄鍵,存在于hkey_lal_ah
19、inesftareirsftindsntnt3.51netrkardsyhfddi1;驅動程序的服務登錄鍵,存在于hkey_lal_ahinesysteurrentntrlsetservies網卡的服務登錄鍵,存在于hkey_lal_ahinesysteurrentntrlsetservies對于每一個網絡部件,一個名為netrules的特殊子鍵在鄰近的驅動程序或網卡登錄子鍵里創(chuàng)建,netrules標識網絡部件為網絡整體的一部分。fddi網卡驅動程序對應的標準軟件登錄表項將出現在以下路徑:hkey_lal_ahinesftarenet612yhfddiyhfddi1.0;驅動程序對應的標準項的值為:desriptin=yhfddi/piadapterntrllerinstalldate=refunt=0 x01servienae=yhfddisftaretype=drivertitle=yhfddi/piadapterntrller而且在yhfddi驅動程序相關的netrules子鍵下,這些值項為:bindable=yhfddidriveryhfddiadapternnexlusiverbindfr=“yhfddisys”yesnntainerlass=reg_ulti_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程給排水分包合同
- 有關工業(yè)品買賣合同集錦10篇-買賣合同8篇
- 事業(yè)單位編外工作人員的合同
- 企業(yè)市場營銷策略與技術文檔
- 倉庫合同租賃協(xié)議
- 弱電智能化勞務分包合同
- 建筑安裝工程建筑承包協(xié)議書
- 喂食車租賃合同8篇
- 2025年毫州貨運從業(yè)資格證模擬考試題庫
- 聯(lián)合經營企業(yè)合同8篇
- 2023對口升學計算機組裝試卷答案
- 小學中小學校園足球人教三年級全一冊踢球技術小學體育三年級足球腳內側踢球教案
- 學校危險化學品自查記錄表
- 三菱gx developer用戶操作手冊
- 家譜樹形圖模板
- 工程交付培訓記錄表
- 髖膝關節(jié)置換術后X線評價-PPT課件
- 蓋梁抱箍法施工計算書蓋梁抱箍法施工方案
- JIS G4305-2021 冷軋不銹鋼板材、薄板材和帶材
- (完整版)涼亭施工方案
- 第一章 - 免疫規(guī)劃信息管理系統(tǒng)
評論
0/150
提交評論