0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

NDIS小端口驅(qū)動(dòng)程序?qū)崿F(xiàn)的關(guān)鍵技術(shù)和應(yīng)用研究

電子設(shè)計(jì) ? 來(lái)源:半導(dǎo)體技術(shù) ? 作者:魯京,陳曦,周祖成 ? 2021-06-11 15:44 ? 次閱讀

1 引言

無(wú)線(xiàn)局域網(wǎng)經(jīng)過(guò)幾年的發(fā)展,在技術(shù)上已經(jīng)日漸成熟。尤其是IEEE推出802.11-1999和802.11b以來(lái),應(yīng)用也日漸廣泛。無(wú)線(xiàn)局域網(wǎng)硬件實(shí)現(xiàn)的兩大主要部分是基帶處理器和MAC控制器,軟件部分包括驅(qū)動(dòng)網(wǎng)卡本身工作的嵌入式軟件網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序。在本文中,首先介紹了小端口驅(qū)動(dòng)程序的基本要點(diǎn),然后給出了基于Driver Studio開(kāi)發(fā)PCMCIA接口編程I/O(Programmed IO)方式工作的無(wú)線(xiàn)局域網(wǎng)網(wǎng)卡NDIS(網(wǎng)絡(luò)驅(qū)動(dòng)程序接口標(biāo)準(zhǔn)),并討論了小端口驅(qū)動(dòng)程序?qū)崿F(xiàn)過(guò)程中的若干關(guān)鍵技術(shù)的細(xì)節(jié)。

2 小端口驅(qū)動(dòng)程序

在典型的網(wǎng)絡(luò)中,如以太網(wǎng)LLC子層及其上層協(xié)議均由軟件實(shí)現(xiàn),MAC及其以下層協(xié)議由硬件實(shí)現(xiàn)。微軟Windows操作系統(tǒng)下的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序遵守NDIS規(guī)范,它在分層的網(wǎng)絡(luò)驅(qū)動(dòng)程序框架中規(guī)定了一個(gè)標(biāo)準(zhǔn)接口,從而使抽象低層次的硬件提供了高層次網(wǎng)絡(luò)上的網(wǎng)絡(luò)管理。因此,該規(guī)范極大簡(jiǎn)化了設(shè)備特定網(wǎng)絡(luò)驅(qū)動(dòng)程序的開(kāi)發(fā)。

NDIS還用于網(wǎng)絡(luò)驅(qū)動(dòng)器的狀態(tài)信息參數(shù)的維護(hù),包括函數(shù)的指針、句柄、鏈接的參數(shù)塊和其他的一些系統(tǒng)變量。NDIS規(guī)范下的網(wǎng)絡(luò)驅(qū)動(dòng)程序分為三類(lèi):小端口驅(qū)動(dòng)程序、中間驅(qū)動(dòng)程序和協(xié)議驅(qū)動(dòng)程序。普通網(wǎng)卡的驅(qū)動(dòng)程序都是小端口驅(qū)動(dòng)程序,它有兩種基本功能:管理一個(gè)網(wǎng)絡(luò)接口卡(NIC),包括通過(guò)NIC收、發(fā)數(shù)據(jù);與高級(jí)驅(qū)動(dòng)程序接口(如中間驅(qū)動(dòng)程序和傳輸協(xié)議驅(qū)動(dòng)程序)。一個(gè)小端口NIC驅(qū)動(dòng)程序通過(guò)NDIS庫(kù)和它的NIC與高層驅(qū)動(dòng)程序相互通訊。NDIS庫(kù) 導(dǎo)出一個(gè)完全的函數(shù)集合(NdisXXX函數(shù)),來(lái)裝入小端口需要調(diào)用的操作系統(tǒng)函數(shù)。然后,小端口必須導(dǎo)出一套MiniportX xx函數(shù)的實(shí)體指針,可供NDIS自己使用或代替高層驅(qū)動(dòng)程序訪問(wèn)小端口。

關(guān)于網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序和Windows驅(qū)動(dòng)程序模型,感興趣的讀者可以參考文獻(xiàn)。

3 無(wú)線(xiàn)網(wǎng)卡驅(qū)動(dòng)程序框架

標(biāo)準(zhǔn)的驅(qū)動(dòng)程序都是C語(yǔ)言寫(xiě)的,Nu Mega公司卻通過(guò)引入C++和封裝基本的函數(shù)庫(kù)簡(jiǎn)化了驅(qū)動(dòng)程序的設(shè)計(jì)。

使用DriverStudio編寫(xiě)網(wǎng)絡(luò)驅(qū)動(dòng)程序,首先需要使用NetworkDriver Wizard生成驅(qū)動(dòng)程序的框架。該框架生成兩個(gè)驅(qū)動(dòng)程序的基本類(lèi):一個(gè)是 wlan_drvDriver,它是KndisMiniDriver的繼承類(lèi);另一個(gè)驅(qū)動(dòng)程序必須且只有一個(gè)KndisMiniDriver的繼承類(lèi)。wlan_drvDriver的定義如下

wlan_drvDriver的唯一工作是定義DriverEntry。操作系統(tǒng)通過(guò)該函數(shù)得知驅(qū)動(dòng)程序的入口。DriverEntry例化NetworkDriver Wizard生成的另外一個(gè)類(lèi)wlan_drvAdapter,并將本驅(qū)動(dòng)程序注冊(cè)。

wlan_drvDriver類(lèi)不用開(kāi)發(fā)者干預(yù)。開(kāi)發(fā)者需要關(guān)心的是另外一個(gè)類(lèi)wlan_drvAdapter,它是KndisMiniAdapter的子類(lèi)。

4 驅(qū)動(dòng)程序的初始化

wlan_drvAdapter類(lèi)的實(shí)現(xiàn)是整個(gè)驅(qū)動(dòng)程序的主體部分,包括初始化驅(qū)動(dòng)程序、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、中斷處理、網(wǎng)卡復(fù)位等。

驅(qū)動(dòng)程序在被裝入操作系統(tǒng)后的第一步工作是進(jìn)行初始化。該工作由wlan_drv Adapter::Initialize函數(shù)完成。該函數(shù)完成的工作如下:

(1)選擇媒體類(lèi)型。對(duì)于無(wú)線(xiàn)局域網(wǎng)為 NDISMedium802_3,而不是NdisMedium-WirelessWan。聲明為 NdisMediumWirelessWan將支持各種無(wú)線(xiàn)媒體類(lèi)型,NdisMedium802_3原本為以太網(wǎng)設(shè)計(jì),這里無(wú)線(xiàn)局域網(wǎng)似乎應(yīng)該聲明為NdisMediumWirelessWan媒體類(lèi)型,但事實(shí)并不是這樣。通過(guò)查詢(xún)OID_GEN_PHYSICAL_MEDIUM,協(xié)議驅(qū)動(dòng)程序

可以得知物理媒體為NdisPhysical-MediumWirelessLan類(lèi)型。

(2)從注冊(cè)表讀取網(wǎng)卡地址。

(3)注冊(cè)適配器的類(lèi)型,如指定設(shè)備為 NdisInterfacePcMcia,代表網(wǎng)卡為PCMCIA標(biāo)準(zhǔn)的PC Card。這里需要強(qiáng)調(diào)的是PCMCIA接口的配置存儲(chǔ)器和功能寄存器都是由主機(jī)自行維護(hù)的,雖然驅(qū)動(dòng)程序也可以讀寫(xiě)配置存儲(chǔ)器和功能寄存器,但這樣做會(huì)導(dǎo)致系統(tǒng)工作的不一致,除非特別需要,驅(qū)動(dòng)程序無(wú)需讀寫(xiě)配置存儲(chǔ)器和功能寄存器。

(4)選擇并注冊(cè)IO端口。

(5)選擇并注冊(cè)中斷。

(6)設(shè)定網(wǎng)卡所支持的包種類(lèi),如廣播中的多播等。

(7)設(shè)定網(wǎng)卡的MAC屬性,如網(wǎng)卡是否支持環(huán)回等。

(8)初始化網(wǎng)卡硬件使其進(jìn)入工作狀態(tài)。該工作由wlan_drvAdapter::CardInit()完成。主要是設(shè)置相應(yīng)的寄存器,讀取永久網(wǎng)卡地址等。

(9)初始化自定義變量。

5 發(fā)送數(shù)據(jù)

當(dāng)需要發(fā)送數(shù)據(jù)包時(shí),NDIS調(diào)用MiniportSend 函數(shù),對(duì)應(yīng)本設(shè)計(jì)中wlan_drvAdapter::Send函數(shù)。如果當(dāng)前沒(méi)有數(shù)據(jù)包正在被發(fā)送,則調(diào)用 CopyDataDown(Packet)將數(shù)據(jù)發(fā)送給NIC,否則將數(shù)據(jù)插入發(fā)送隊(duì)列。當(dāng)中斷產(chǎn)生后,發(fā)現(xiàn)代表網(wǎng)卡準(zhǔn)備好接收下一個(gè)包,此時(shí)將數(shù)據(jù)包出列。

CopyDataDown(Packet)函數(shù)與具體的網(wǎng)卡實(shí)現(xiàn)有關(guān)。

6 接收數(shù)據(jù)

由于本設(shè)計(jì)中的網(wǎng)卡是程控I/O的網(wǎng)卡,速度較慢。每次產(chǎn)生中斷時(shí),如果發(fā)現(xiàn)NIC上緩存了一個(gè)數(shù)據(jù)包需要接收,則通過(guò)NdisMEthIndicateReceive 通知給NDIS,對(duì)應(yīng)于m_Lookahead.In di cate函數(shù)。如果是DMA設(shè)備,可以一次將整個(gè)數(shù)據(jù)包通知給上層,對(duì)于PIO方式的NIC,DDK建議只通知部分?jǐn)?shù)據(jù),然后讓NDIS調(diào)用MiniportTransferData來(lái)讀取余下的數(shù)據(jù)。當(dāng)然NDIS也許對(duì)該數(shù)據(jù)不感興趣,就不會(huì)讀剩下的數(shù)據(jù)。

7 中斷處理

與中斷處理有關(guān)的函數(shù)包括中斷服務(wù)程序 wlan_drvAdapter::Isr和延遲過(guò)程調(diào)用函數(shù)wlan_drvAdapter::HandleInterrupt。

中斷服務(wù)程序Isr工作在DIRL,會(huì)搶斷工作在更低中斷優(yōu)先級(jí)的線(xiàn)程,所以應(yīng)該盡快退出。該程序的主要任務(wù)是判斷中斷當(dāng)前是否是本網(wǎng)卡產(chǎn)生的,如果沒(méi)有應(yīng)該將*InterruptRecognized 設(shè)定為FALSE,并退出程序。如果是,則將中斷處理程序HandleInterrupt插入DPC列隊(duì),以在Passive Level上進(jìn)一步處理中斷。

中斷處理程序是真正處理中斷的函數(shù),它完成所有數(shù)據(jù)處理工作,它需要處理包括與統(tǒng)計(jì)信息有關(guān)的接收數(shù)據(jù)、發(fā)送數(shù)據(jù)等所有中斷。

8 結(jié)論

網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序是無(wú)線(xiàn)局域網(wǎng)網(wǎng)絡(luò)接口卡實(shí)現(xiàn)的關(guān)鍵部分,它與傳統(tǒng)的以太網(wǎng)卡稍有不同,但網(wǎng)卡與主機(jī)之間數(shù)據(jù)通信的基本格式與以太線(xiàn)網(wǎng)卡是相同的。本文首先介紹了小端口驅(qū)動(dòng)程序的特點(diǎn),然后給出了基于DriverStudio開(kāi)發(fā)PCMCIA接口程控I/O方式工作的無(wú)線(xiàn)局域網(wǎng)網(wǎng)卡的NDIS小端口驅(qū)動(dòng)程序,其主體部分中包括驅(qū)動(dòng)程序框架、驅(qū)動(dòng)程序的初始化、發(fā)送和接收數(shù)據(jù)和中斷處理在內(nèi)的關(guān)鍵技術(shù)細(xì)節(jié)。本文所設(shè)計(jì)的網(wǎng)卡已經(jīng)在原型網(wǎng)卡中運(yùn)行,基本滿(mǎn)足了設(shè)計(jì)要求。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5052

    文章

    18909

    瀏覽量

    300723
  • 無(wú)線(xiàn)
    +關(guān)注

    關(guān)注

    31

    文章

    5402

    瀏覽量

    172851
  • 局域網(wǎng)
    +關(guān)注

    關(guān)注

    5

    文章

    734

    瀏覽量

    46202
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    汽車(chē)總線(xiàn)及其關(guān)鍵技術(shù)研究

    汽車(chē)總線(xiàn)及其關(guān)鍵技術(shù)研究
    發(fā)表于 07-10 11:33

    無(wú)線(xiàn)局域網(wǎng)NDIS端口驅(qū)動(dòng)怎么實(shí)現(xiàn)?

    在本文中,首先介紹了小端口驅(qū)動(dòng)程序的基本要點(diǎn),然后給出了基于Driver Studio開(kāi)發(fā)PCMCIA接口編程I/O(Programmed IO)方式工作的無(wú)線(xiàn)局域網(wǎng)網(wǎng)卡NDIS(網(wǎng)絡(luò)驅(qū)動(dòng)程序
    發(fā)表于 05-31 06:59

    LCD顯示的關(guān)鍵技術(shù)

    可以用硬件電路或軟件程序實(shí)現(xiàn)B.只能用濾波電路或雙穩(wěn)態(tài)電路實(shí)現(xiàn)C.只能用軟件程序實(shí)現(xiàn)D.只能用延時(shí)程序
    發(fā)表于 09-10 08:39

    視覺(jué)導(dǎo)航關(guān)鍵技術(shù)及應(yīng)用

    由于視覺(jué)導(dǎo)航技術(shù)的應(yīng)用越來(lái)越普及 ,因此 ,有必要對(duì)視覺(jué)導(dǎo)航中的關(guān)鍵技術(shù)及應(yīng)用進(jìn)行研究。文章對(duì)其中的圖像處理技術(shù)和定位與跟蹤技術(shù)進(jìn)行了詳細(xì)
    發(fā)表于 09-25 08:09

    CITECT驅(qū)動(dòng)程序結(jié)構(gòu)及其重用性的研究

    本文通過(guò)對(duì)CITECT驅(qū)動(dòng)程序的工作方式分析,討論了CITECT軟件與其提供的驅(qū)動(dòng)程序之間交換數(shù)據(jù)和命令的方式,研究了基于二進(jìn)制代碼的CITECT驅(qū)動(dòng)程序的可重用性。
    發(fā)表于 06-15 08:37 ?20次下載

    基于NDIS中間層的包過(guò)濾的研究與設(shè)計(jì)

    在分析介紹Windows 2000/xp 平臺(tái)的NDIS 驅(qū)動(dòng)程序的基礎(chǔ)上,提出了一種使用NDIS中間層驅(qū)動(dòng)程序實(shí)現(xiàn)包過(guò)濾的方法。應(yīng)用該方法
    發(fā)表于 08-22 09:40 ?21次下載

    NDIS驅(qū)動(dòng)程序研究和基于NDIS網(wǎng)絡(luò)監(jiān)測(cè)程序實(shí)現(xiàn)

    本文介紹了Windows環(huán)境下根據(jù)網(wǎng)絡(luò)設(shè)備接口規(guī)范(Network Device Interface Specification)NDIS開(kāi)發(fā)網(wǎng)絡(luò)驅(qū)動(dòng)程序技術(shù)。并分析了開(kāi)發(fā)基于NDIS
    發(fā)表于 08-29 08:46 ?11次下載

    基于NDIS中間驅(qū)動(dòng)的包過(guò)濾器的設(shè)計(jì)實(shí)現(xiàn)

    分析了網(wǎng)絡(luò)驅(qū)動(dòng)程序接口規(guī)范(NDIS)的體系結(jié)構(gòu)和標(biāo)準(zhǔn)開(kāi)發(fā)接口。介紹了設(shè)計(jì)實(shí)現(xiàn)局域網(wǎng)數(shù)據(jù)包過(guò)濾器的關(guān)鍵技術(shù)和包過(guò)濾的基本過(guò)程。最后完成了實(shí)驗(yàn)驗(yàn)證,結(jié)果表明,基于NDI
    發(fā)表于 09-24 16:36 ?9次下載

    虛擬串行端口驅(qū)動(dòng)程序免費(fèi)下載

    虛擬串行端口驅(qū)動(dòng)程序免費(fèi)下載
    發(fā)表于 10-29 14:31 ?8次下載

    Windows CE設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)

    本文介紹了 Windows CE 體系結(jié)構(gòu)和開(kāi)發(fā) wince 設(shè)備驅(qū)動(dòng)程序的過(guò)程,闡述了設(shè)備驅(qū)動(dòng)程序模型、設(shè)備驅(qū)動(dòng)結(jié)構(gòu)和中斷處理。 Windows CE 操作系統(tǒng)支持4種設(shè)備驅(qū)動(dòng)模型:
    發(fā)表于 04-18 10:13 ?0次下載

    嵌入式電源管理關(guān)鍵技術(shù)研究實(shí)現(xiàn)

    嵌入式電源管理關(guān)鍵技術(shù)研究實(shí)現(xiàn)
    發(fā)表于 06-14 16:27 ?8次下載

    Linux驅(qū)動(dòng)程序缺陷檢測(cè)研究

    驅(qū)動(dòng)程序是操作系統(tǒng)的重要組成部分。驅(qū)動(dòng)程序運(yùn)行于內(nèi)核態(tài),其可靠性對(duì)于操作系統(tǒng)的安全可靠非常關(guān)鍵。針對(duì)Linux驅(qū)動(dòng)程序,研究基于符號(hào)執(zhí)行的
    發(fā)表于 11-21 15:26 ?9次下載
    Linux<b class='flag-5'>驅(qū)動(dòng)程序</b>缺陷檢測(cè)<b class='flag-5'>研究</b>

    基于符號(hào)執(zhí)行技術(shù)實(shí)現(xiàn)驅(qū)動(dòng)程序的漏洞檢測(cè)

    的思路,提出了一種基于符號(hào)執(zhí)行技術(shù)實(shí)現(xiàn)驅(qū)動(dòng)程序模擬環(huán)境,可以用于分析和檢測(cè)Linux設(shè)備驅(qū)動(dòng)程序中存在的安全漏洞。該環(huán)境通過(guò)模擬內(nèi)核提供給驅(qū)動(dòng)程序
    發(fā)表于 12-05 16:06 ?0次下載
    基于符號(hào)執(zhí)行<b class='flag-5'>技術(shù)</b><b class='flag-5'>實(shí)現(xiàn)</b>的<b class='flag-5'>驅(qū)動(dòng)程序</b>的漏洞檢測(cè)

    Linux設(shè)備驅(qū)動(dòng)程序的平臺(tái)驅(qū)動(dòng)程序和字符驅(qū)動(dòng)程序介紹

    了解Linux設(shè)備驅(qū)動(dòng)程序的基礎(chǔ)知識(shí),重點(diǎn)介紹平臺(tái)驅(qū)動(dòng)程序和字符驅(qū)動(dòng)程序。 提出了簡(jiǎn)單的平臺(tái)驅(qū)動(dòng)程序實(shí)現(xiàn)和簡(jiǎn)單的字符
    的頭像 發(fā)表于 11-27 06:32 ?4224次閱讀

    步進(jìn)電機(jī)驅(qū)動(dòng)器的關(guān)鍵技術(shù)研究

    電子發(fā)燒友網(wǎng)站提供《步進(jìn)電機(jī)驅(qū)動(dòng)器的關(guān)鍵技術(shù)研究.pdf》資料免費(fèi)下載
    發(fā)表于 10-09 16:30 ?0次下載
    步進(jìn)電機(jī)<b class='flag-5'>驅(qū)動(dòng)</b>器的<b class='flag-5'>關(guān)鍵技術(shù)研究</b>