windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動程序設(shè)計(jì)_第1頁
windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動程序設(shè)計(jì)_第2頁
windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動程序設(shè)計(jì)_第3頁
windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動程序設(shè)計(jì)_第4頁
windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、windows nt環(huán)境下fddi網(wǎng)卡驅(qū)動程序設(shè)計(jì)前言indsnt是一個功能全面的操作系統(tǒng),具有完全集成式的連網(wǎng)能力,它的網(wǎng)絡(luò)模型開始于a子層,網(wǎng)絡(luò)接口卡(netrkinterfaeard以后簡稱網(wǎng)卡或ni)驅(qū)動程序駐留在其中。通過相關(guān)的網(wǎng)卡把indsnt與網(wǎng)絡(luò)連接起來,但一直到80年代后期,許多傳輸協(xié)議的實(shí)現(xiàn)受限于a層接口的獨(dú)特實(shí)現(xiàn),因?yàn)閍層定義了協(xié)議與網(wǎng)卡之間的轉(zhuǎn)換機(jī)制。1989年,irsft和3兩公司提出了一個定義a層與si模型高層協(xié)議驅(qū)動程序之間的網(wǎng)絡(luò)設(shè)備接口規(guī)范(netrkdevieinterfaespeifiatin:ndis),ndis給數(shù)據(jù)交換提出了一個靈活的環(huán)境,它規(guī)范了軟件

2、接口稱為ndis接口,傳輸協(xié)議可用它與網(wǎng)卡驅(qū)動程序進(jìn)行通信。因此在indsnt環(huán)境下開發(fā)核心態(tài)網(wǎng)卡驅(qū)動程序應(yīng)遵循ndis規(guī)范。對于高速網(wǎng)絡(luò)fddi(fiberdistributeddatainterfae)網(wǎng)卡驅(qū)動程序還需要st(statinanageent)站管理功能的實(shí)現(xiàn),否則將不能作為一個fddi站連入環(huán)結(jié)構(gòu)中,只能實(shí)現(xiàn)點(diǎn)到點(diǎn)間的數(shù)據(jù)通信。故有必要將st軟件移植到網(wǎng)卡驅(qū)動程序中,這將又導(dǎo)致對iniprtni驅(qū)動程序編程框架的破壞,于是有必要形成fddi網(wǎng)卡驅(qū)動程序(包含st)與indsnt操作系統(tǒng)的良好接口由邏輯網(wǎng)卡的注冊和a層驅(qū)動程序的初始化來完成。所以,本課題旨在深入研究應(yīng)用irsf

3、t公司的ddk(deviedriverkit)將st移植于indsnt的fddi網(wǎng)卡驅(qū)動程序過程中如何注冊iniprtni驅(qū)動程序。即怎樣正確注冊邏輯網(wǎng)卡和a驅(qū)動程序的初始化。著重討論與初始化相關(guān)的上邊緣函數(shù)的使用和調(diào)用關(guān)系以及初始化過程中遇到的各種問題的具體解決。第一章indsnt環(huán)境下fddi網(wǎng)卡驅(qū)動程序總體結(jié)構(gòu)介紹第一節(jié)indsnt網(wǎng)絡(luò)結(jié)構(gòu)1.1.1indsnt網(wǎng)絡(luò)體系結(jié)構(gòu)indsnt的網(wǎng)絡(luò)體系結(jié)構(gòu)是基于國際標(biāo)準(zhǔn)化(is)制定的標(biāo)準(zhǔn)模型開放式系統(tǒng)互連(pensysteinternnetin:si)參考模型分層建立的,這種方式有利于隨時擴(kuò)展其它功能和服務(wù)。indsnt網(wǎng)絡(luò)模型開始于a子層,

4、網(wǎng)卡驅(qū)動程序就駐留在其中。它通過相關(guān)的網(wǎng)卡把indsnt與網(wǎng)絡(luò)連接起來,圖中的多個網(wǎng)卡表明在一臺運(yùn)行indsnt的計(jì)算機(jī)上能使用多種網(wǎng)卡。這一網(wǎng)絡(luò)體系結(jié)構(gòu)包括兩個重要接口ndis接口與傳輸驅(qū)動程序接口(tdi)。這兩個接口把兩個層隔離開來,辦法是相鄰的部件只允許按單一的標(biāo)準(zhǔn)來寫,不允許多重標(biāo)準(zhǔn)。例如一個網(wǎng)卡驅(qū)動程序(在ndis接口的下面)就不需要特地按每個傳輸協(xié)議來寫它的代碼塊,恰恰相反,該驅(qū)動程序是寫給ndis接口的,它通過符合ndis的相應(yīng)傳輸協(xié)議來請求服務(wù)。這些接口包含在indsnt的網(wǎng)絡(luò)體系結(jié)構(gòu)中,以容納可移植、可互換的模塊。在兩個接口之間,是傳輸協(xié)議。它在網(wǎng)絡(luò)中起著組織者的作用。一個

5、傳輸協(xié)議規(guī)定了數(shù)據(jù)以何種方式呈遞給下一個接收層,以及如何對數(shù)據(jù)相應(yīng)地進(jìn)行打包。它通過ndis把數(shù)據(jù)傳給網(wǎng)卡驅(qū)動程序,并通過tdi把數(shù)據(jù)傳給轉(zhuǎn)發(fā)程序(rediretr)tdi之上是轉(zhuǎn)發(fā)程序,它把本地的網(wǎng)絡(luò)資源申請轉(zhuǎn)送給網(wǎng)絡(luò)。為了能和其他廠商的網(wǎng)絡(luò)互連,indsnt允許有多個轉(zhuǎn)發(fā)程序。對于每一個轉(zhuǎn)發(fā)程序indsnt計(jì)算機(jī)必須也有一個相應(yīng)的供應(yīng)者(prvider)(由網(wǎng)絡(luò)廠商提供)。多供應(yīng)者路由選擇程序決定適當(dāng)?shù)墓?yīng)者,然后借助于供應(yīng)者,對應(yīng)用請求到相應(yīng)的轉(zhuǎn)發(fā)程序做出選擇。1.1.2indsnt網(wǎng)絡(luò)驅(qū)動程序indsnt支持兩種類型的網(wǎng)絡(luò)驅(qū)動程序傳輸驅(qū)動程序?qū)崿F(xiàn)數(shù)據(jù)鏈路層中的邏輯鏈路控制子層協(xié)議和傳輸

6、層協(xié)議。向下與ndis接口,向上與tdi接口。網(wǎng)卡驅(qū)動程序?qū)崿F(xiàn)對物理層的管理和數(shù)據(jù)鏈路層中介質(zhì)訪問控制子層協(xié)議,通過ndis向下管理物理網(wǎng)卡,向上與傳輸驅(qū)動程序通信。1.1.3indsnt網(wǎng)卡驅(qū)動程序indsnt環(huán)境下的網(wǎng)卡驅(qū)動程序也分為兩種:iniprt網(wǎng)卡驅(qū)動程序:iniprt驅(qū)動程序只須實(shí)現(xiàn)與網(wǎng)絡(luò)硬件相關(guān)的操作(包括發(fā)送和接收)。而所有底層網(wǎng)卡驅(qū)動程序的通用操作(如同步),一般由ndis接口程序來實(shí)現(xiàn)。full網(wǎng)卡驅(qū)動程序:full網(wǎng)卡驅(qū)動程序必須實(shí)現(xiàn)所有硬件相關(guān)和同步、排隊(duì)等操作。例如full網(wǎng)卡驅(qū)動程序?yàn)榱隧憫?yīng)數(shù)據(jù)接收,需要保持本身的捆綁信息,而iniprt就可以由ndis接口庫來實(shí)

7、現(xiàn)。在indsnt的早期版本中,full網(wǎng)卡驅(qū)動程序要求開發(fā)者實(shí)現(xiàn)許多底層操作,來處理多處理器的核心問題以及處理器、線程的同步,這樣不同的開發(fā)者在大量重復(fù)著許多相同的工作。而iniprt網(wǎng)卡驅(qū)動程序允許開發(fā)者僅僅寫一些與網(wǎng)絡(luò)硬件相關(guān)的代碼即可,而那些通用的函數(shù)由ndis接口庫來實(shí)現(xiàn),這樣開發(fā)出來的驅(qū)動程序減少了不必要的工作。第二節(jié)iniprt驅(qū)動程序的結(jié)構(gòu)ndis接口規(guī)范了網(wǎng)卡驅(qū)動程序的實(shí)現(xiàn),同時也對tdi驅(qū)動程序的實(shí)現(xiàn)提出了一定的要求,在nt中,ndis約束下的網(wǎng)卡驅(qū)動程序、tdi驅(qū)動程序和系統(tǒng)的關(guān)系如下圖所示:圖2.0ndis約束下的網(wǎng)卡驅(qū)動程序、tdi驅(qū)動程序和系統(tǒng)的關(guān)系iniprt驅(qū)動

8、程序包括驅(qū)動程序?qū)ο?、?qū)動程序源代碼和ndis接口庫代碼。indsntddk提供ndis.h作為iniprt驅(qū)動程序的主要頭文件,定義了iniprt驅(qū)動程序的入口點(diǎn)、ndis接口庫函數(shù)和通用數(shù)據(jù)結(jié)構(gòu)。上邊緣函數(shù)的作用是網(wǎng)卡驅(qū)動與ndis接口庫進(jìn)行通信,而下邊緣函數(shù)是tdi協(xié)議驅(qū)動程序與ndis通信的手段。1.2.1iniprt網(wǎng)卡對象ndis用一個叫做邏輯網(wǎng)卡的軟件對象來描述系統(tǒng)中的每塊網(wǎng)卡,而邏輯網(wǎng)卡與indsnt設(shè)備對象的通信由i/子系統(tǒng)來管理,描述網(wǎng)卡的設(shè)備對象包括相關(guān)的網(wǎng)絡(luò)信息如名字、網(wǎng)絡(luò)地址和網(wǎng)卡內(nèi)存基地址等,它還包含與硬件相關(guān)的驅(qū)動程序狀態(tài)數(shù)據(jù)(捆綁數(shù)目,捆綁句柄,包過濾數(shù)據(jù)庫等)

9、。ndis分配一個句柄到iniprtinitialize這個上邊緣函數(shù)的一個結(jié)構(gòu)中,然后iniprt網(wǎng)卡驅(qū)動程序?qū)⒃谝院筇峁┻@個句柄來給ndis調(diào)用,這個結(jié)構(gòu)一直被ndis保持,并且對iniprt驅(qū)動程序不透明。當(dāng)iniprt網(wǎng)卡驅(qū)動程序初始化一塊網(wǎng)卡時,它創(chuàng)立自己的內(nèi)部數(shù)據(jù)結(jié)構(gòu)來描述網(wǎng)卡,記錄需要它管理的與設(shè)備相關(guān)的狀態(tài)信息。當(dāng)iniprt網(wǎng)卡驅(qū)動程序調(diào)用ndissetatttibutes或ndissetattributesex兩ndis庫函數(shù)時,它傳遞一個句柄給這數(shù)據(jù)結(jié)構(gòu)。這樣,當(dāng)調(diào)用iniprt驅(qū)動程序入口點(diǎn)時,它就傳遞這個句柄來驗(yàn)證驅(qū)動程序所對應(yīng)的網(wǎng)卡的正確性。這個數(shù)據(jù)結(jié)構(gòu)為inipr

10、t網(wǎng)卡驅(qū)動程序所擁有并維護(hù)。1.2.2網(wǎng)絡(luò)對象標(biāo)識符iniprtni驅(qū)動程序還需要維護(hù)一組對象,這些對象是系統(tǒng)定義的對象標(biāo)識符(bjetidetifier:id)來標(biāo)識,以描述驅(qū)動程序的性能和當(dāng)前狀態(tài)信息。為查詢這些信息,上層驅(qū)動程序調(diào)用ndisrequest向ndis接口庫指示id。id表示了調(diào)用所需的信息類型,如iniprt驅(qū)動程序所支持的lkahead緩沖區(qū)大小等。ndis接到上層驅(qū)動程序的查詢請求,將id傳遞給上邊緣函數(shù)iniprtqueryinfratin實(shí)現(xiàn)對id的查詢,如果上層驅(qū)動程序請求改變狀態(tài)信息則調(diào)用iniprtsetinfratin實(shí)現(xiàn)對id的設(shè)置。1.2.3iniprt

11、網(wǎng)卡驅(qū)動程序代碼典型的iniprtni驅(qū)動程序必須有一些函數(shù)來通過ndis接口實(shí)現(xiàn)上層驅(qū)動程序與硬件的通信。這些函數(shù)稱為上邊緣服務(wù)函數(shù)。這些上邊緣服務(wù)函數(shù)由驅(qū)動程序的開發(fā)者根據(jù)驅(qū)動程序面向的特定低層網(wǎng)絡(luò)類型和硬件以及相應(yīng)環(huán)境,可以有選擇地實(shí)現(xiàn),但必須保證驅(qū)動程序最基本的功能,這些基本功能包括初始化、發(fā)送、中斷處理、重置、參數(shù)查詢與設(shè)置和報文接收。iniprtinitialize:操作系統(tǒng)根據(jù)系統(tǒng)配置信息,檢測出網(wǎng)卡已安裝時,由ndis接口在初始化時調(diào)用,主要完成低層網(wǎng)絡(luò)類型確定,對應(yīng)于物理網(wǎng)卡的邏輯網(wǎng)卡初始化,中斷信息注冊,網(wǎng)卡與主機(jī)通訊方式的確認(rèn)。i/端口的申請與注冊,內(nèi)存映像,ib的初始化

12、,物理網(wǎng)卡的驗(yàn)證與初始化等。iniprtrenfigure:支持網(wǎng)卡參數(shù)動態(tài)變化,和iniprtinitilize一樣由ndis接口以初始化級別調(diào)度執(zhí)行(不能屏蔽中斷,必須由驅(qū)動程序承認(rèn)并清除在此期間產(chǎn)生的中斷),支持即插即用和軟配置的網(wǎng)卡在動態(tài)改變參數(shù)時,必須提供此函數(shù)。iniprtqueryinfratin:查詢網(wǎng)卡的狀態(tài)以及網(wǎng)卡驅(qū)動程序的操作或統(tǒng)計(jì)參數(shù),如是否支持組通訊、網(wǎng)卡的物理速率是否支持回環(huán)、是否支持直接拷貝等,這些參數(shù)以id方式統(tǒng)一管理。iniprtsetinfratin:ndis接口或協(xié)議驅(qū)動程序通過調(diào)用此接口改變驅(qū)動程序維護(hù)的id庫,一些操作參數(shù)的改變也將同時改變驅(qū)動程序狀態(tài)

13、,例如組地址的設(shè)置。iniprtreset:包括網(wǎng)卡硬件重置和驅(qū)動程序軟件重置,軟件重置包括驅(qū)動程序狀態(tài)重置,以及一些相關(guān)的參數(shù)重置,還需考慮有些參數(shù)的恢復(fù),重置時不必完成所有正在活躍的外部請求,但必須釋放已占用的外部資源。iniprthalt:掛起網(wǎng)卡并釋放該網(wǎng)卡驅(qū)動程序占用的所有資源,在此期間不屏蔽中斷。iniprtisr:高優(yōu)先級的中斷處理程序,進(jìn)行的工作包括初始中斷處理類型,決定是否進(jìn)行中斷轉(zhuǎn)交,對卡上中斷進(jìn)行處理等,該服務(wù)類型只在以下情況被調(diào)用:ndis接口調(diào)用iniprtinitialize和iniprthalt兩函數(shù)時。中斷處理類型設(shè)為每此中斷處理過程都調(diào)用時。為使系統(tǒng)能及時響應(yīng)

14、所有硬件中斷,高優(yōu)先級的硬件中斷處理程序應(yīng)盡可能的減少運(yùn)行時間,防止長時間的屏蔽低優(yōu)先級中斷,避免造程中斷丟失。iniprthandlEinterrupt:由中斷延時處理程序在中斷延時處理時進(jìn)行調(diào)用。ndis排隊(duì)所有的延時處理,該服務(wù)主要處理發(fā)送完成、報文接收、描述符用勁溢出、網(wǎng)卡異常等中斷。iniprtsend:ndis收到上層發(fā)送請求時經(jīng)過若干協(xié)議處理再向下調(diào)用此服務(wù)過程,發(fā)送的paket已含有l(wèi)l和a頭,該服務(wù)過程進(jìn)行邊界對齊、paket約束重整、描述符映射和報文發(fā)送、以及發(fā)送資源和paket緩沖隊(duì)列管理。iniprttransferdata:多個已和網(wǎng)卡捆綁的協(xié)議驅(qū)動程序在接收到報文到

15、達(dá)指示后,向網(wǎng)卡驅(qū)動程序發(fā)出傳送請求以拷貝各自所需的報文數(shù)據(jù)部分,網(wǎng)卡驅(qū)動程序根據(jù)各協(xié)議驅(qū)動程序?qū)蝹€paket是否進(jìn)行多次拷貝,以決定是否暫存只允許單次拷貝的paket等。iniprthekhandle:ndis每秒調(diào)用此服務(wù)函數(shù)一次,驅(qū)動程序發(fā)現(xiàn)網(wǎng)卡異常時報告給ndis由ndis調(diào)用iniprtreset進(jìn)行硬件重恢復(fù)。iniprtenableintrrupt:中斷使能。iniprtdisableinterrupt:中斷屏蔽。另外,每個網(wǎng)卡驅(qū)動程序必須有一個初始化入口點(diǎn),由driverentry函數(shù)實(shí)現(xiàn),它和系統(tǒng)相關(guān),由操作系統(tǒng)在裝入驅(qū)動程序時調(diào)用,主要完成初始化ndisrapper,再由

16、rapper初始生成驅(qū)動程序管理塊并完成相應(yīng)各種初始化工作,登錄網(wǎng)卡驅(qū)動程序所有上邊緣服務(wù)入口點(diǎn),同時寫入ndis版本信息。1.2.4ndis接口庫ndis接口庫包括在ndis.sys中,它是一個核態(tài)函數(shù)庫,有一套抽象的函數(shù),無論協(xié)議驅(qū)動程序還是ni驅(qū)動程序都連接到這個庫中,以實(shí)現(xiàn)上下層之間的操作。第二章fddi網(wǎng)卡驅(qū)動程序的加載和運(yùn)行第一節(jié)網(wǎng)卡驅(qū)動程序的安裝indsnt網(wǎng)卡驅(qū)動程序安裝的目的是實(shí)現(xiàn)網(wǎng)卡相應(yīng)硬件信息和驅(qū)動程序在indsnt注冊庫中的注冊,使indsnt能夠正確識別網(wǎng)卡,了解所必需的軟硬件信息并能在indsnt啟動時加載相應(yīng)驅(qū)動程序。網(wǎng)卡驅(qū)動程序安裝時,首先在主群組的控制面板中選

17、擇“網(wǎng)絡(luò)”,然后添加網(wǎng)卡,指定相應(yīng)信息文件esetup.inf的路徑,以完成以下兩個必要的操作:復(fù)制驅(qū)動程序到相應(yīng)的系統(tǒng)目錄(indsnt根目錄syste32drivers)中;在indsnt注冊庫中存入相應(yīng)軟硬件信息。下面主要以fddi網(wǎng)卡為例介紹安裝驅(qū)動程序所必需的工作:2.1.1網(wǎng)卡一般硬件參數(shù)對于fddi網(wǎng)卡,必須在編寫其esetup.inf文件時確定以下硬件參數(shù):總線類型:pi(5)括號中的數(shù)字5表示pi總線在ndis中的總線類型代碼;廠商代號:0 x5588系統(tǒng)加載時確定網(wǎng)卡的標(biāo)記,也是編程時確定pi槽號的標(biāo)識;fid:0 x01;介質(zhì)類型:光纖(3)括號中的數(shù)字表示光纖在ndis

18、中的介質(zhì)類型代碼;是否支持全雙工:支持。對于其它的硬件信息在此inf配置信息文件中可有可無,如若配置,則可在驅(qū)動程序的編寫時利用這些信息,方便編程,同時有利于其它應(yīng)用對其參數(shù)的確定和使用。2.1.2fddi網(wǎng)卡加載時需在注冊庫登錄表里做的網(wǎng)絡(luò)配置網(wǎng)卡驅(qū)動程序的安裝通常將創(chuàng)建登錄表中的四個不同子鍵:sftareregistrin鍵,對應(yīng)于驅(qū)動程序,存在于hkey_lal_ahinesftarepanyprdutnaeversin中。我們的fddi網(wǎng)卡驅(qū)動程序所對應(yīng)的是hkey_lal_ahinesftarenet612yhfddiyhfddi1.0;網(wǎng)卡的軟件登錄鍵,存在于hkey_lal_ah

19、inesftareirsftindsntnt3.51netrkardsyhfddi1;驅(qū)動程序的服務(wù)登錄鍵,存在于hkey_lal_ahinesysteurrentntrlsetservies網(wǎng)卡的服務(wù)登錄鍵,存在于hkey_lal_ahinesysteurrentntrlsetservies對于每一個網(wǎng)絡(luò)部件,一個名為netrules的特殊子鍵在鄰近的驅(qū)動程序或網(wǎng)卡登錄子鍵里創(chuàng)建,netrules標(biāo)識網(wǎng)絡(luò)部件為網(wǎng)絡(luò)整體的一部分。fddi網(wǎng)卡驅(qū)動程序?qū)?yīng)的標(biāo)準(zhǔn)軟件登錄表項(xiàng)將出現(xiàn)在以下路徑:hkey_lal_ahinesftarenet612yhfddiyhfddi1.0;驅(qū)動程序?qū)?yīng)的標(biāo)準(zhǔn)項(xiàng)的值為:desriptin=yhfddi/piadapterntrllerinstalldate=refunt=0 x01servienae=yhfddisftaretype=drivertitle=yhfddi/piadapterntrller而且在yhfddi驅(qū)動程序相關(guān)的netrules子鍵下,這些值項(xiàng)為:bindable=yhfddidriveryhfddiadapternnexlusiverbindfr=“yhfddisys”yesnntainerlass=reg_ulti_

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論