国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

利用WinDriver開發PCI設備驅動程序

發布時間:2009-3-25 16:31    發布者:李寬
關鍵詞: PCI , WinDriver , 驅動程序 , 設備
WinDriver是Jungo公司出版的一個設備驅動程序開發組件,它可以大大加速PCI設備驅動程序的開發。作者在實際的項目中采用了WinDriver來開發設備驅動程序,取得了相當好的運行效果。從目前國內的資料上來看,大多數設計人員還是在用DDK、Vtools開發設備驅動程序,因而作者覺得有必要向大家介紹與推薦這個軟件。WinDriver是一套設備驅動程序開發組件,它的目的就是方便Windows程序員快速開發出PCI/ISA設備的Windows驅動程序(目前最新的版本V4.32還支持PCMCIA、USB設備的驅動程序的開發,并且除了支持Windows9X/NT系統外,還有支持Unix、WindowsCE的版本推出)。利用WinDriver開發設備驅動程序,不需要熟悉操作系統的內核,整個驅動程序中的所有函數都是工作在用戶態下的,通過與WinDriver的.Vxd或者.Sys文件交互來達到驅動硬件的目的。由于是一個用戶態程序,效率的高低也就成了人們選擇WinDriver時關心的一個問題。大量實踐數據表明,WinDriver并沒有通過犧牲系統性能來換取驅動程序的快速開發,的確是一個“像開發用戶態程序那樣簡單,像核心態程序那樣高效”[1]的開發工具。
圖1是WinDriver的體系結構圖。


1 WinDriver主要特征
  ·提供了從用戶層訪問硬件的簡單方法;
  ·能夠方便地將性能要求特別苛刻的部分通過Windriver提供的API插入到核心態模式運行,提高執行效率;
  ·對主流PCI接口芯片(AMCC、PLX、V3系列)提供了很好的支持;
  ·可以利用常見的軟件開發平臺(Visual C++、Borland C++、VB4、Java、Delphi);
  ·支持I/O、DMA、中斷處理,支持PCI、ISA、EISA設備的開發;
  ·無需DDK以及核心態程序開發的經驗。
2 開發步驟
a.根據WinDriver的文檔,建議開發步驟如下:
  · 打開WinDriver  Wizard,利用Wizard來分析待開發驅動程序的卡,然后自動生成驅動程序的框架代碼;
  · 修改代碼,加入定制功能;
  · 在用戶態執行與調試代碼;
  · 將性能苛刻部分插入到核心態;
b.我們在實際編寫驅動程序的過程中發現,完全用WinDriver提供的API來寫驅動程序比在Wizard生成的框架代碼上修改更為靈活。一般來說,PCI驅動程序分成3個部分:初始化部分,對硬件資源的訪問函數庫、具體調用部分。其中,后面兩個部分對于不同的硬件都是基本一致的。比如說,我們先后開發的基于AMCC5933與PLX9052的PCI接口卡,對于他們的硬件資源訪問,用的都是WinDriver下面相同的API;兩者開發的不同只在于初始化時對于硬件資源的鎖定。所以只要開發出了針對一種接口芯片的系統的驅動代碼后,以后一般只要修改接口芯片的ID值及一些寄存器的偏移值,就能夠移植了,比每次生成不同的框架代碼再改動也許要更簡便。
3 實例分析
整個驅動程序的結構大致如下:
    · 打開WinDriver設備;
    · 查找我們要訪問的PCI設備;
    · 枚舉該設備的資源(內存、I/O、中斷);
  · 鎖定該設備的資源只能為我們所用,不能被其他程序訪問;
  · 訪問板上的資源;
  · 解鎖資源;
  · 關閉WinDriver設備。
以下為一段使用WinDriver開發的AMCC5933DMA的驅動代碼,利用這個程序來演示WinDriver的程序結構。這個程序只要稍加修改,就可以用來作為其他PCI卡的驅動程序的一部分,例如PLX9050、9054。為了節省篇幅,省略了變量說明部分。程序中出現的變量大都由其名稱可以反映含義,具體可以參見WinDriver的設計文檔中的說明。
  hWD=WD_Open();                      //打開WinDriver設備,每次使用前必須調用;
  pciScan.searchId.dwVendorId=0x10e8;      //AMCC公司供貨號
  pciScan.searchId.dwDeviceId=0x4750;
                                              //AMCC5933的設備號
  WD_PciScanCards (hWD, &pciScan);
                                              //枚舉PCI槽上的設備
  pciSlot=pciScan.cardSlot[0];        //假設只有我們一個設備,得到設備槽的號碼
  pciCardInfo.pciSlot=pciSlot; 
  WD_PciGetCardInfo(hWD,&pciCardInfo);  //得到該設備槽上的設備信息
  Card=pciCardInfo.Card;            //Card為一個反映PCI卡上資源的結構
  cardReg.Card=Card;
  WD_CardRegister(hWD,&cardReg);         //向核心態登記,鎖定卡上資源
  Item=Card.Item[2];                //將卡上的號為2的資源賦給Item
  if(Item.item==ITEM_MEMORY)
  {
    regAddr=Item.I.Mem.dwUserDirectAddr;  //得到PCI卡上的內存映射到用戶態的地址
    }
    Dma1.dwBytes=4*dwDWord;
    Dma1.pUserAddr=pBuffer1;
    Dma1.dwOptions=0;
    WD_DMALock(hWD,&Dma1);               //鎖定用于DMA的內存資源
    至此與PCI卡上的內存進行DMA傳輸的準備已經完成,下面只要寫相應的控制字就可以啟動DMA操作了。
4 常見問題的解答
(1)評估版本的功能限制及其解決
評估版本除了30天的限制外,與正式版本相比還有3個限制。其中影響最大的是所有的關閉函數(DMA鎖定內存的解鎖,資源的關閉...)都加了延時。這樣我們在做數據采集卡的驅動程序時就要注意,最好只分配一次資源。比如說做DMA操作,不要反復地鎖定內存,這樣會在解鎖時損失效率。一個折衷的方法是鎖定DMA內存后,一旦這塊內存寫滿后,就將其中數據拷到用戶態程序分配的大內存中去。
(2)用WinDriver開發的程序效率
在使用WinDriver或者VxdTools這類工具時,大家最關心的一個問題可能就是效率問題。從實踐與分析來看,WinDriver生成的驅動代碼的效率相當地高。比如PCI卡的高速數據采集涉及到DMA的應用,WinDriver提供了相應的API來將卡上的內存映射到用戶態程序所能直接訪問的地址空間中,然后直接對這個映射后得到的地址進行DMA操作。也就是說,與用DDK來直接編寫驅動程序的區別就在于地址映射的操作上,在這部分工作上面,用WinDriver的API肯定沒有直接用DDK寫的專門面向特定硬件優化的代碼來得高效。但是這部分代碼實際上屬于初始化工作,這部分的效率高低事實上并不會影響總體上的效率。
實際中,用WinDriver編寫的PCI驅動程序在賽揚466、64M內存的機器上,在8位模式下可以穩定地采集4~8Mbytes/s的數據。而且隨著硬件設計的改變,肯定還有提高余地。
經過實際應用,發現WinDriver這個軟件使用快速,無論是開發效率還是實際達到的性能指標都相當令人滿意。特別對于硬件開發人員來說,可以不必了解繁瑣的操作系統的內核知識,就可以快速地開發出驅動程序,對于調試硬件是一個很好的幫助工具。
本文地址:http://www.qingdxww.cn/thread-3174-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 無線充電基礎知識及應用培訓教程3
  • 想要避免發生災難,就用MPLAB® SiC電源仿真器!
  • 5分鐘詳解定時器/計數器E和波形擴展!
  • 基于CEC1712實現的處理器SPI FLASH固件安全彈性方案培訓教程
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美视频在线一区 | 精品手机在线视频 | 欧美一级黑人片 | 国产精品国产三级国产普通 | 亚洲黄色在线播放 | 婷婷丁香视频 | 一级黄色毛片视频 | 亚洲四区| 日本精品中文字幕在线不卡 | 综合色天天 | swag国产精品| 亚洲成人影院在线 | 免费一级做a爰片性色毛片 免费一级做a爰片久久毛片潮 | 色亚洲视频| 毛片免费全部免费播放 | 久草中文网 | 午夜视频免费 | 久久国产精品久久国产片 | 黄视频网站在线观看 | 在线不卡一区二区三区日韩 | 中文字幕日韩欧美一区二区三区 | 欧美三级视频在线 | 国产精品无卡无在线播放 | 久久99精品国产麻豆宅宅 | 91网站网址最新 | 国产一区91| 91情侣高清精品国产 | 91热久久 | 日日碰夜夜 | 91视频啪啪| 微拍秒拍99福利精品小视频 | 日韩在线欧美 | 亚洲欧美日本国产 | 国产视频一 | a色视频| 天天操天天玩 | 国产亚洲精品自在线观看 | heyzo亚洲 | 欧美一区二区在线观看视频 | 色播久久 | 91黄视频在线观看 |