《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > PCI傳輸卡的WDM驅動程序設計

PCI傳輸卡的WDM驅動程序設計

2008-08-01
作者:杜 欣, 馬秦生

??? ? : 介紹了在Windows2000操作系統下,使用DriverStudio軟件編寫符合WDM模式的PCI數據傳輸卡驅動程序,并詳細分析了一個應用實例??

??? 關鍵詞: PCI總線? 設備驅動程序? WDM模式? DriverStudio

?

  PCI總線規范是為提高微機總線的數據傳輸速度而制定的一種局部總線標準?在設計自行開發的基于PCI總線的數據傳輸設備時,需要開發相應的設備驅動程序" title="設備驅動程序">設備驅動程序?通常開發PCI設備驅動程序有多種模式,Windows2000環境下,主要采用WDM模式?本文針對自行開發的基于PCI總線的CCD視頻信號傳輸控制卡,編寫了符合WDM模式的驅動程序?

1 WDM模式驅動程序

1.1 WDM模式(Windows Driver Model)

  Windows2000對驅動程序的編寫不再基于以往的Win3.xWin9x下的VxD(虛擬設備驅動程序)結構,而是基于一種新的驅動模型——WDM(Windows Driver Model)?

WDMWindows98/2000/XP操作系統的設備驅動程序的設計提供了統一的框架?WDM來源于Windows NT的分層32位設備驅動程序模型(layered 32-bit device driver model)?它支持更多的特性,如即插即用(PnP)?電源管理?WMINT事件?

1.2 設備驅動程序

  設備驅動程序是操作系統的一個組成部分,它由I/O管理器(I/O" title="I/O">I/O Manager)管理和調動?Windows2000操作系統下的I/O管理器" title="管理器">管理器功能描述如圖1所示?

?

  I/O管理器每收到一個來自用戶應用程序" title="應用程序">應用程序的請求就創建一個I/O請求包(IRP)的數據結構,并將其作為參數傳遞給驅動程序?驅動程序通過識別IRP中的物理設備對象(PDO)來區別是發送給哪一個設備?IRP結構中存放請求的類型?用戶緩沖區的首地址?用戶請求數據的長度等信息?驅動程序處理完這個請求后,在該結構中填入處理結果的有關信息,調用IoCompleteRequest將其返回給 I/O管理器,用戶應用程序的請求隨即返回?訪問硬件時,驅動程序通過調用硬件抽象層的函數實現?

1.3 DriverStudio工具簡介

  NuMega Lab公司開發的DriverStudio是一整套開發?調試和檢測Windows平臺下設備驅動程序的工具軟件包?它把DDK(Device Development Kit)封裝成完整的C++函數庫,根據具體硬件通過向導生成框架代碼,并且提供了一套完整的調試和性能測試工具SoftICE?DriverMonitor等?

2 應用實例

  本文利用PCI專用接口芯片PCI9052設計了一個數據傳輸控制卡?卡上主要的芯片有PCI9052?FIFO(CY7C4221)?CPLD(MAX7064S)A/D轉換器(MAX1197)?傳輸卡硬件框圖如圖2所示。面陣CCD得到的視頻信號經過調理電路,生成的視頻調理信號通過A/D轉換器進行數字化處理,送入FIFO中?在CPLD的控制下,數據經過PCI9052送入PCI總線,再傳送到計算機內存中,并顯示在監視器上?驅動程序必須實現如下幾個基本功能:(1)硬件中斷;(2)能支持應用程序獲取數據;(3)能根據外部FIFO(CY7C4221)的狀態啟動或停止突發傳輸?

?

??? 在數據輸入過程中,最重要的是對數據進行實時控制,因此需要硬件中斷。在中斷程序中,根據外部FIFO狀態完成數據的讀入。

2.1 DriverWizard生成驅動程序框架

??? DriverStudio中的DriverWorks軟件為開發WDM程序提供了一個完整的框架?它包含一個可快速生成WDM驅動程序框架的代碼生成向導工具DriverWizard,而且還帶有許多類庫?在用DriverWizard生成的程序框架中寫入相對于設備的特定代碼,編譯后即可得到所需的驅動程序?

  在利用DriverWorks V2.7的向導Driver Wizard完成驅動程序的框架時共有11個步驟,其中關鍵步驟有:

  (1)在第四步中選中PCI,并在VendorIDDeviceID中分別輸入廠商號和設備號,還需填入PCI Subsystem IDPCI Revision ID?這四項可以用網上的免費軟件PCITreePCIView瀏覽PCI設備,用這兩個軟件也可以得到BAR0~BAR5的資源分配情況和中斷號?

  (2)第七步IRP隊列排隊方法,它決定了驅動程序檢查設備的方式?本設計選SystemManaged,則所有的IRP排隊都由系統(I/O管理器)完成?

  (3)第九步是最關鍵的一步?首先在Resources中添加資源,name中輸入變量名,PCI Base Address中輸入0~5的序列號。0~5BAR0~BAR5一一對應?在設置中斷對話框中,name欄寫入中斷服務程序的名稱,選中創建中斷服務程序ISR(Create ISR),不選創建延遲程序調用DPC(Create DPC),選中Make ISR/DPC class functions,使ISR/DPC成為設備類的成員函數?

??? 其次選中Buffer以選取讀寫方式,用于描述與I/O操作相關的數據緩沖區?本設計需要快速傳送大量數據,因此采用Direct I/O方式?

??? (4)在第十步中,需要加入與應用程序或者其他驅動程序通信的I/O控制代碼參量?

2.2 驅動程序模塊框圖和代碼分布

??? PCI設備驅動程序模塊包括配置空間的訪問模塊?IO端口模塊?內存讀寫模塊和終端模塊等?各模塊之間是對等的?驅動程序模塊框圖如圖3所示?

?

??? 驅動程序初始化模塊代碼段放在#pragma? code_seg (“INT)#pragma? code_seg( )雪之間?在系統初始化完成后,這部分代碼從內存中釋放,防止占用系統寶貴的內存資源?#pragma? code_seg( )之后是驅動程序和系統的許多模塊的實現部分。這部分在驅動程序運行后不會從內存中釋放。

2.3 驅動程序主要模塊的實現

??? (1) 雪配置空間的訪問模塊

??? DriverWorksKPciConfiguration類封裝了訪問PCI設備配置空間的所有操作?首先初始化這個類的實例:

??? KpciConfiguration PciConfig(m_Lower.TopOfStack( ));

??? /*m_Lower KpnpLowerDevice類的對象?m_LowerTopOfStack( )返回當前設備堆棧頂部的設備對象。*/

初始化完后可以直接利用成員函數 ReadHeader/ WriteHeader函數訪問所有的配置寄存器?

??? 為了確定映射空間的類型和大小,先向目標基地址寄存器寫入0Xffffffffh,然后回讀該寄存器的值?如果最低位為1,表示映射于I/O空間,反之為存儲空間;如果映射于存儲空間,從第四位開始計算0的個數可以確定內存空間的大小;如果是I/O方式,從第二位開始計算0的個數可確定I/O空間的大小,最大為256字節?如果設備的存儲空間超過256字節,要實現設備的整個存儲部分的訪問,就必須采用內存映射?

??? (2) I/O操作模塊

??? DriverworksKIoRange類封裝了I/O端口訪問的操作?部分代碼如下:

??? {

??? KIORange? DevIoPort( );//創建實例

??? NTSTATUS status= DevIoPort( ).Initialize? (pResListTranslated,pResListRaW,PciConfig.BaseAddressIndexToOrdinal(0));

??? /*第一個參數為轉換后的資源列表指針;第二個參數為原始資源列表指針;第三個參數中的0 I/O口對應的基地址,用來轉換成特定端口資源的序數*/

??? If(NT _SUCCESS(status))

??? {……

????????????? DevIoPort.inb(0,LineBuf1,10);

??? /*成功初始化后可分別用KIoRange類的成員函數inb( )/outb( )從端口中讀/寫字節 */

??? else{Invalidate( );return status;

??? /*未能初始化成功,錯誤信息在status*/

??? }

……}

??? (3) 內存讀寫模塊

??? DriverWorks KMemoryRange類封裝了端口訪問的操作?

??? status=m_MemoryRange( ).Initialize(pResListTranslated,pResListRaw, PciConfig.BaseAddressIndexToOrdinal(0));

??? 此函數的參數?意義及具體用法與I/O端口的操作基本相同?

??? 內存對象也用來發送控制字,以控制CPLD的開始和停止等?實際上控制字" title="控制字">控制字是通過PCI9052發送的?該控制字地址已被映射成PCI的內存空間?所以定義一個指向內存空間的內存對象,通過該對象即可發送控制字?

??? (4)中斷模塊

??? 在中斷模塊,首先要激活PCI9052中斷使能位,然后判斷硬件中斷響應是否產生,如果有,則進行突發傳輸,讀入FIFO中的數據?

??? BOOLEAN TranCard::Isr_MyIrq(void)

??? {?if ( // 中斷未產生)

??????? {……

????return? FALSE;}

??? else

??? {/*如果產生硬件中斷,設置命令寄存器,進行突發數據傳輸*/

?????? return TRUE;}

??? {

??? 為了將硬件中斷與編寫的中斷服務程序連接在一起,采用InitializeAndConnect方法,部分代碼如下:

??? NTSTATUS TranCardDevice::OnStartDevice(KIrp I)

??? {……

?????? status=m_MyIrq. InitializeAndConnect(

?????? pResListTranlated,

?????? LinkTo(Isr_MyIrq)

?????? This;)

??? ……)

2.4 驅動程序的調用

??? 編寫驅動程序本身不是最終目的,最終目的是調用驅動程序管理資源,并為用戶應用程序使用?驅動程序加載以后,它的許多進程處于Idle狀態,實際上需要用戶應用程序去調用激活?應用程序利用Win32 API直接調用驅動程序,實現驅動程序和應用程序的信息交互?

??? 首先用CreateFile( )打開設備,獲得一個指向設備對象的句柄?使用CreateFile函數時應注意:由于驅動程序是*.sys,所以第一個參數應該是這個設備對象的標志連接(symbolic link)?該標志連接名有一個設置數據文件搜索路徑的數字號,而這個數字號通常是零?如果這個連接名是″TranCard,則傳遞給CreateFile的宇符串就是:\\\\.\\ TranCard0″?例如:

HANDLE hDevice=CreateFile:\\\\.\\TranCard0GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING,0,NULL);

??? 然后用 DeviceIoControl( )進行數據的傳送?最后用CloseHandle( )關閉設備句柄?

??? 下面是應用DeviceIoControl( )程序片段?

??? {……

??? m_b=DeviceIoControl(hDevice)TRANCARD_IOCTL_RECEIVE,buffer, sizeof(buffer),NULL, 0,&buffersize,NULL);

??? ……}

2.5 驅動程序的調試

??? 采用SoftICE?DriverMonitor作為調試工具,基本調試過程如下:(1)使用symbol loader加載驅動程序,然后使用SoftICE跟蹤調試,確認驅動程序正常加載;(2)對核心的中斷響應程序代碼,SoftICE中的Genint命令產生虛擬中斷,單步跟蹤中斷;(3)硬件發送大量的數據,通過查看內存的數據,確認數據傳輸是否正確?

??? 在驅動程序的調試過程中,經常出現系統“死機”?“藍屏”等現象,這些情況可能因內存訪問分頁錯誤?設備資源和系統資源沖突?I/O使用錯誤?程序中“指針”使用錯誤等因素造成?

??? 上述方案均調試通過?使用WDM模式開發驅動程序,程序結構清晰,開發周期較短,效率高?在PCI從模式條件下,大數據量連續傳輸速度可達28Mbps以上?

?

參考文獻

1 Walter Oney.Programming the Microsoft Windows Drivers?Model.Microsoft Press Copyright[c]. 1999

2 DriverWorks Help V2.7. Compuware Corporation,2002

3 張惠娟,周利華,翟鴻鳴.Windows環境下的設備驅動程序設計.西安:西安電子科技大學出版社,2002

4 Chris Cant, ,馬莉波,國雪飛譯.Windows WDM備驅動程序開發指南.2000

?

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          伊人成人开心激情综合网| 性亚洲最疯狂xxxx高清| 欧美一区二区三区四区在线| 欧美好骚综合网| 亚洲综合欧美日韩| 国产精品久久久久国产a级| 久久久亚洲欧洲日产国码αv| 久久久蜜桃精品| 欧美精品v日韩精品v韩国精品v| 影音先锋亚洲视频| 亚洲欧美激情视频在线观看一区二区三区| 久久亚洲免费| 一区二区三区精品国产| 91久久香蕉国产日韩欧美9色| 免费观看成人| 正在播放亚洲| 久久久久国产精品一区二区| 欧美日韩成人综合天天影院| 国产亚洲欧美日韩在线一区| 国产精品v欧美精品v日韩| 国产精品日韩欧美| 欧美www视频| 一区精品在线| 午夜精品福利一区二区三区av| 国产裸体写真av一区二区| 欧美日韩国产bt| 亚洲人成7777| 欧美国产日韩一区二区三区| 国产精品激情| 亚洲欧美欧美一区二区三区| 国产欧美日韩视频一区二区| 亚洲风情在线资源站| 亚洲视频网站在线观看| 麻豆成人在线播放| 国产精品成人av性教育| 午夜精品av| 欧美人与性动交α欧美精品济南到| 国产欧美亚洲一区| 国产精品h在线观看| 牛夜精品久久久久久久99黑人| 亚洲一区国产视频| 一二三四社区欧美黄| 夜夜躁日日躁狠狠久久88av| 亚洲天堂av图片| 亚洲每日在线| 久久久精品性| 亚洲电影免费观看高清完整版在线观看| 亚洲国产美女精品久久久久∴| 免费成人美女女| 欧美一区二区三区四区在线观看| 国产精品一区免费观看| 久久久91精品国产| 国产精品美女www爽爽爽| 久久久97精品| 久久精品在线免费观看| 国产精品国产亚洲精品看不卡15| 国产精品免费观看视频| 日韩视频免费在线观看| 最新国产成人在线观看| 欧美激情一区| 亚洲欧美日韩国产综合在线| 亚洲男人天堂2024| 亚洲人成在线播放网站岛国| 欧美视频在线不卡| 国产精品美女久久久久久2018| 国产精品久久久久aaaa九色| 欧美韩国在线| 欧美性做爰猛烈叫床潮| 亚洲人体大胆视频| 欧美成人黑人xx视频免费观看| 国产日韩欧美不卡在线| 麻豆精品精华液| a91a精品视频在线观看| 欧美肉体xxxx裸体137大胆| 欧美肥婆bbw| 国产精品福利在线观看| 亚洲欧洲视频| 欧美黄色大片网站| 久久超碰97人人做人人爱| 欧美视频三区在线播放| 久久综合网络一区二区| 亚洲电影免费在线| 久久久亚洲综合| 国产精品男gay被猛男狂揉视频| 先锋影音国产一区| 日韩网站免费观看| 欧美一区二区三区播放老司机| 久久婷婷国产综合国色天香| 美国三级日本三级久久99| 欧美激情一区二区三区四区| 亚洲精品国产精品国自产观看浪潮| 欧美xxxx在线观看| 欧美一区二区三区在线| 久久午夜电影网| 亚洲午夜久久久久久久久电影网| 可以看av的网站久久看| 亚洲国产精选| 欧美三级欧美一级| 欧美亚洲在线播放| 欧美一区=区| 亚洲色图自拍| 欧美三级电影大全| 久久成人人人人精品欧| 久久黄色级2电影| 精品999日本| 欧美xxxx在线观看| 久久久精品久久久久| 欧美成人精精品一区二区频| 久久激情视频免费观看| 韩日在线一区| 欧美jizzhd精品欧美喷水| 国产麻豆精品theporn| 国内精品视频久久| 欧美成人按摩| 欧美日韩精品一区二区三区四区| 国产美女扒开尿口久久久| 欧美国产视频在线| 亚洲综合激情| 国产精品久久久久国产精品日日| 国产精品入口尤物| 久久青草欧美一区二区三区| 免费一级欧美在线大片| 欧美日韩视频一区二区| 久久久久国色av免费观看性色| 99精品久久久| 午夜精品久久久久久久99樱桃| 99精品视频免费观看视频| 老司机午夜精品视频| 一区二区福利| 亚洲图片你懂的| 久久精精品视频| 午夜精品久久久久| 亚洲精品中文字幕在线| 欧美色图一区二区三区| 亚洲国产美女精品久久久久∴| 欧美精品福利视频| 亚洲精品国产欧美| 欧美一区二区在线视频| 国产日韩欧美一区二区三区在线观看| 久久久久国产精品麻豆ai换脸| 欧美日韩一区二区三区在线| 欧美日韩日韩| 久久久久久精| 久久精品一区二区三区不卡牛牛| 欧美三区不卡| 欧美国产一区二区在线观看| 中文在线不卡| 好吊日精品视频| 久久伊人免费视频| 亚洲国产日韩欧美一区二区三区| 欧美激情精品久久久久久变态| 国产精品网站视频| 久久国产日韩| 一本色道久久88精品综合| 一区二区三区欧美激情| 麻豆精品传媒视频| 国产亚洲欧美一区在线观看| 欧美激情性爽国产精品17p| 亚洲乱码一区二区| 国产女人精品视频| 免费成人美女女| 欧美日韩在线大尺度| 麻豆精品网站| 欧美成人高清| 在线日韩成人| 国产日韩一区二区| 久久久久久久一区二区| 国精品一区二区| 欧美日韩精品二区| 亚洲一区国产| 国产中文一区| 欧美手机在线视频| 久久精品亚洲精品国产欧美kt∨| 久久精品91久久香蕉加勒比| 久久久综合网站| 午夜日韩激情| 国产精品爽黄69| 欧美久色视频| 欧美精品一区二区视频| 亚洲欧美综合精品久久成人| 在线观看的日韩av| 亚洲制服欧美中文字幕中文字幕| 亚洲国产专区校园欧美| 欧美亚洲色图校园春色| 欧美成人一区二区| 韩国精品久久久999| 亚洲精品日韩久久| 久久久av网站| 国产美女精品在线| 午夜精品美女自拍福到在线| 欧美在线视频在线播放完整版免费观看| 国产欧美日韩三区| 亚洲国产日韩欧美在线动漫| 国产区亚洲区欧美区| 激情视频一区| 久久精品在线免费观看| 亚洲第一页中文字幕| 国产欧美一区二区三区在线老狼| 亚洲国产精品成人精品| 一区二区三区视频免费在线观看| 亚洲日本成人网| 欧美极品影院| 国产精品国产三级国产普通话99| 在线亚洲免费视频| 午夜精品偷拍| 亚洲电影免费观看高清完整版在线| 欧美色精品天天在线观看视频| 国产一区99| 国产精品一区二区三区乱码| 国产精品v欧美精品∨日韩| 亚洲国产欧美久久| 亚洲欧美日韩天堂| 国产日韩av一区二区| 一区二区三区你懂的| 久久国产精品亚洲va麻豆| 欧美黄色一区二区| 老司机午夜精品视频在线观看| 久久爱www| 亚洲第一福利在线观看| 亚洲欧美一区二区精品久久久| 黑人一区二区三区四区五区| 久久精品在线视频| 欧美性猛片xxxx免费看久爱| 久久久久国色av免费观看性色| 久久精品女人| 狠狠干狠狠久久| 久久综合给合久久狠狠狠97色69| 一区二区免费在线播放| 欧美日韩视频免费播放| 久久免费视频网| 国产精品v亚洲精品v日韩精品| 久久天天狠狠| 久久精品视频网| 99在线精品视频在线观看| 一本色道久久综合狠狠躁的推荐| 狂野欧美一区| 你懂的网址国产 欧美| 一本色道久久综合亚洲精品按摩| av不卡免费看| 99精品欧美一区| 亚洲第一精品福利| 久久久久99精品国产片| 欧美日韩在线三级| 亚洲手机成人高清视频| 欧美一区深夜视频| 国产精品久久久亚洲一区| 亚洲日本乱码在线观看| 亚洲一级一区| 国产精品国产成人国产三级| 欧美一区二区三区免费视| 午夜久久福利| 久久九九全国免费精品观看| 久久精品国产精品亚洲精品| 美日韩丰满少妇在线观看| 欧美激情网站在线观看| 欧美大片免费观看在线观看网站推荐| 欧美精品免费视频| 亚洲美洲欧洲综合国产一区| 一区久久精品| 久久精品官网| 国产视频亚洲精品| 一区二区三区日韩| 亚洲欧美第一页| 欧美美女bb生活片| 久久久九九九九| 欧美激情亚洲另类| 欧美午夜视频| aa日韩免费精品视频一| 一本一本久久a久久精品综合麻豆| 国产精品女主播一区二区三区| 在线亚洲观看| 欧美极品在线观看| 亚洲人成人77777线观看| 免费欧美电影| 中文av一区二区| 性欧美video另类hd性玩具| 红杏aⅴ成人免费视频| 国产精品超碰97尤物18| 久久久久国产精品午夜一区| 亚洲欧洲日产国产综合网| 国产精品久久久久久久久免费| 亚洲国产cao| 好吊成人免视频| 免费成人av资源网| 欧美成人嫩草网站| 午夜精品免费视频| 美日韩丰满少妇在线观看| 欧美成人精品高清在线播放| 欧美一区视频| 亚洲国内高清视频| 性欧美在线看片a免费观看| 国产一区二区视频在线观看| 国产欧美一区二区三区久久人妖| 久久成人综合网| 欧美影视一区| 国产精品区二区三区日本| 国产精品国码视频| 亚洲视频自拍偷拍| 99国产精品私拍| 欧美一级二区| 一区二区三区在线免费播放| 久久综合伊人77777尤物| 国产亚洲欧美色| 欧美少妇一区| 亚洲欧美春色| 99视频超级精品| 欧美日韩久久久久久| 亚洲欧美激情精品一区二区| 国产精品大片wwwwww| 另类天堂av| 日韩一区二区精品视频| 欧美日韩免费在线观看| 亚洲综合二区| 亚洲女人小视频在线观看| 美女福利精品视频| 国产欧美日韩免费| 欧美精品一区在线播放| 国产日本亚洲高清| 亚洲精品欧美一区二区三区| 欧美午夜影院| 91久久久精品| 久久亚洲风情| 国产精品日韩在线一区| 欧美一级免费视频| 国产精品久久| 小辣椒精品导航| 一区在线免费观看| 亚洲国产成人精品视频|