當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]利用WinDriver開(kāi)發(fā)PCI設(shè)備驅(qū)動(dòng)程序

摘要:WinDriver是一套PCI驅(qū)動(dòng)程序開(kāi)發(fā)包。它改變了傳統(tǒng)驅(qū)動(dòng)程序開(kāi)發(fā)的方法與思路,極在地簡(jiǎn)化了驅(qū)動(dòng)程序的編制;同時(shí),又沒(méi)有犧牲驅(qū)動(dòng)程序的性能,是一套高效、快捷的PCI驅(qū)動(dòng)程序開(kāi)發(fā)軟件包。特別適合專業(yè)硬件人員的使用。

WinDriver是Jungo公司出版的一個(gè)設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)組件,它可以大大加速PCI設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)。作者在實(shí)際的項(xiàng)目中采用了WinDriver來(lái)開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序,取得了相當(dāng)好的運(yùn)行效果。從目前國(guó)內(nèi)的資料上來(lái)看,大多數(shù)設(shè)計(jì)人員還是在用DDK、Wtools開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序,因而作者覺(jué)得有必要向大家介紹與推薦這個(gè)軟件。

WinDriver是一套設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)組件,它的目的就是方便Windows程序員快速開(kāi)發(fā)出PCI/ISA設(shè)備的Windows驅(qū)動(dòng)程序(目前最新的版本V4.32還支持PCMCIA、USB設(shè)備的驅(qū)動(dòng)程序的開(kāi)發(fā),并且除了支持Windows9X/NT系統(tǒng)外,還有支持Unix、Windows CE的版本推出)。利用WinDriver開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序,不需要熟悉操作系統(tǒng)的內(nèi)核,整個(gè)驅(qū)動(dòng)程序中的所有函數(shù)都是工作在用戶態(tài)下的,通過(guò)與WinDriver的.Vxd或者.Sys文件交互來(lái)達(dá)到驅(qū)動(dòng)硬件的目的。由于是一個(gè)用戶態(tài)程序,效率的高低也就成了人們選擇WinDriver時(shí)關(guān)心的一個(gè)問(wèn)題。大量實(shí)踐數(shù)據(jù)表明,WinDriver并沒(méi)有通過(guò)犧牲系統(tǒng)性能來(lái)?yè)Q取驅(qū)動(dòng)程序的快速開(kāi)發(fā),的確是一個(gè)“像開(kāi)發(fā)用戶態(tài)程序那樣簡(jiǎn)單,像核心態(tài)程序那樣高效”[1]的開(kāi)發(fā)工具。

1 WinDriver主要特征

  ·提供了從用戶層訪問(wèn)硬件的簡(jiǎn)單方法;

  ·能夠方便地將性能要求特別苛刻的部分通過(guò)Windriver提供的API插入到核心態(tài)模式運(yùn)行,提高執(zhí)行效率;

  ·對(duì)主流PCI接口芯片(AMCC、PLX、V3系列)提供了很好的支持;

  ·可以利用常見(jiàn)的軟件開(kāi)發(fā)平臺(tái)(Visual C++、Borland C++、VB4、Java、Delphi);

  ·支持I/O、DMA、中斷處理,支持PCI、ISA、EISA設(shè)備的開(kāi)發(fā);

  ·無(wú)需DDK以及核心態(tài)程序開(kāi)發(fā)的經(jīng)驗(yàn)。

2 開(kāi)發(fā)步驟

  a.根據(jù)WinDriver的文檔,建議開(kāi)發(fā)步驟如下:

  ·修改代碼,加入定制功能;

  ·在用戶態(tài)執(zhí)行與調(diào)試代碼;

  ·將性能苛刻部分插入到核心態(tài);

b.我們?cè)趯?shí)際編寫驅(qū)動(dòng)程序的過(guò)程中發(fā)現(xiàn),完全用WinDriver提供API來(lái)寫驅(qū)動(dòng)程序比在Wizard生成的框架代碼上修改更為靈活。一般來(lái)說(shuō),PCI驅(qū)動(dòng)程序分成3個(gè)部分:初始化部分,對(duì)硬件資源的訪問(wèn)函數(shù)庫(kù)、具體調(diào)用部分。其中,后面兩個(gè)部分對(duì)于不同的硬件都是基本一致的。比如說(shuō),我們先后開(kāi)發(fā)的基于AMCC5933與PLX9052的PCI接口卡,對(duì)于他們的硬件資源訪問(wèn),用的都是WinDriver下面相同的API;兩者開(kāi)發(fā)的不同只在于初始化時(shí)對(duì)于硬件資源的鎖定。所以只要開(kāi)發(fā)出了針對(duì)一種接口芯片的系統(tǒng)的驅(qū)動(dòng)代碼后,以后一般只要修改接口芯片的ID值及一些寄存器的偏移值,就能夠移植了,比每次生成不同的框架代碼再改動(dòng)也許要更簡(jiǎn)便。

3 實(shí)例分析

整個(gè)驅(qū)動(dòng)程序的結(jié)構(gòu)大致如下:

  ·打開(kāi)WinDriver設(shè)備;

  ·查找我們要訪問(wèn)的PCI設(shè)備;

  ·枚舉該設(shè)備的資源(內(nèi)存、I/O、中斷);

  ·鎖定該設(shè)備的資源只能為我們所用,不能被其他程序訪問(wèn);

  ·訪問(wèn)板上的資源;

  ·解鎖資源;

  ·關(guān)閉WinDriver設(shè)備。

以下為一段使用WinDriver開(kāi)發(fā)的AMCC5933DMA的驅(qū)動(dòng)代碼,利用這個(gè)程序來(lái)演示W(wǎng)inDriver的程序結(jié)構(gòu)。這個(gè)程序只要稍加修改,就可以用來(lái)作為其他PCI卡的驅(qū)動(dòng)程序的一部分,例如PLX9050、9054。為了節(jié)省篇幅,省略了變量說(shuō)明部分。程序中出現(xiàn)的變量大都由其名稱可以反映含義,具體可以參見(jiàn)WinDriver的設(shè)計(jì)文檔中的說(shuō)明。

  hWD=WD_Open(); //打開(kāi)WinDriver設(shè)備,每次使用前必須調(diào)用;

  pciScan.searched.dwVendorId=0x10e8; //AMCC公司供貨號(hào)

  pciScan.searched.dwDeviceId=0x4750; //AMCC5933的設(shè)備號(hào)

  WD_PciScanCards (hWD,&pciSxcan); //枚舉PCI槽上的設(shè)備

  pciSlot =pciScan.cardSilt[0]; //假設(shè)只有我們一個(gè)設(shè)備得到設(shè)備槽的號(hào)碼

  pciCardInfo.pciSlot=pciSlot;

  WD_PciGetCardInfo(hWD,&pciCardInfo); //得到該設(shè)備槽上的設(shè)備信息

  Card=pciCardInfo.Card; //Card為一個(gè)反映PCI卡上資源的結(jié)構(gòu)

  cardReg.Card=Card;

  WD_CardRegister(hWD,&cardReg); //向核心態(tài)登記,鎖定卡上資源

  Item=Card.Item[2]; //將卡上的號(hào)為2的資源賦給Item

  if(Item.item==ITEM_MEMORY)

  {

  regAddr=Item.I.Mem.dwUserDirectAddr; //得到PCI卡上的內(nèi)存映射到用戶態(tài)的地址

  }

  Dma1.dwBytes=4*dwDWord;

  Dma1.pUserAddr=pBuffer1;

  Dma1.dwOptiONs=0;

  WD_DMALock(hWD,&Dma1); //鎖定用于DMA的內(nèi)存資源

至此與PCI卡上的內(nèi)存進(jìn)行DMA傳輸?shù)臏?zhǔn)備已經(jīng)完成,下面只要寫相應(yīng)的控制字就可以啟動(dòng)DMA操作了。

4 常見(jiàn)問(wèn)題的解答

(1)評(píng)估版本的功能限制及其解決

評(píng)估版本除了30天的限制外,與正式版本相比還有3個(gè)限制。其中影響最大的是所有的關(guān)閉函數(shù)(DMA鎖定內(nèi)存的解鎖,資源的關(guān)閉…)都加了延時(shí)。這樣我們?cè)谧鰯?shù)據(jù)采集卡的驅(qū)動(dòng)程序時(shí)就要注意,最好只分配一次資源。比如說(shuō)做DMA操作,不要反復(fù)地鎖定內(nèi)存,這樣會(huì)在解鎖時(shí)損失效率。一個(gè)折衷的方法是鎖定DMA內(nèi)存后,一旦這塊內(nèi)存寫滿后,就將其中數(shù)據(jù)拷到用戶態(tài)程序分配的大內(nèi)存中去。

(2)用WinDriver開(kāi)的程序效率

在使用WinDriver或者VxdTools這類工具時(shí),大家最關(guān)心的一個(gè)問(wèn)題可能就是效率問(wèn)題。從實(shí)踐與分析來(lái)看,WinDriver生成的驅(qū)動(dòng)代碼的效率相當(dāng)?shù)馗摺1热鏟CI卡的高速數(shù)據(jù)采集涉及到DMA的應(yīng)用,WinDriver提供相應(yīng)的API來(lái)將卡上的內(nèi)存映射到用戶態(tài)程序所能直接訪問(wèn)的地址空間中,然后直接對(duì)這個(gè)映射后得到的地址進(jìn)行DMA操作。也就是說(shuō),與用DDK來(lái)直接編寫驅(qū)動(dòng)程序的區(qū)別就在于地址映射的操作上,在這部分工作上面,用WinDriver的API肯定沒(méi)有直接用DDK寫的專門面向特定硬件優(yōu)化的代碼來(lái)得高效。但是這部分代碼實(shí)際上屬于初始化工作,這部分的效率高低事實(shí)上并不會(huì)影響總體上的效率。

實(shí)際中,用WinDriver編寫的PCI驅(qū)動(dòng)程序在賽揚(yáng)466、64M內(nèi)存的機(jī)器上,在8位模式下可以穩(wěn)定地采集4~8Mbytes/s的數(shù)據(jù)。而且隨著硬件設(shè)計(jì)的改變,肯定還有提高余地。

經(jīng)過(guò)實(shí)際應(yīng)用,發(fā)現(xiàn)WinDriver這個(gè)軟件使用快速,無(wú)論是開(kāi)發(fā)效率還是實(shí)際達(dá)到的性能指標(biāo)都相當(dāng)令人滿意。特別對(duì)于硬件開(kāi)發(fā)人員來(lái)說(shuō),可以不必了解繁瑣的操作系統(tǒng)的內(nèi)核知識(shí),就可以快速地開(kāi)發(fā)出驅(qū)動(dòng)程序,對(duì)于調(diào)試硬件是一個(gè)很好的幫助工具。

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

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

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

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

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

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

關(guān)鍵字: 騰訊 編碼器 CPU

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

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

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

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

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

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

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

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

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

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉