999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于KMDF的PCI Express 設備驅動設計

2014-07-13 01:24:38張小磊孟李林崔晨琪
西安航空學院學報 2014年1期
關鍵詞:設備模型

張小磊,孟李林,崔晨琪

(西安郵電大學 電子工程學院,陜西 西安 710061)

設備驅動是計算機系統里軟硬件交互的接口,是計算機操縱硬件的基礎,它的性能在很大程度上影響著整個系統的性能。KMDF是微軟推出的下一代驅動模型WDF中的內核模式驅動程序框架,意在取代從WINDOWS2000就開始使用的WDM模型。其旨在為開發者提供一個面向對象的事件驅動開發框架,并封裝了驅動與操作系統的接口使開發者可以更關注驅動需要操控的硬件,以改變長久以來驅動程序作為硬件和操作系統的連接,既要處理硬件行為,又要與操作系統內核交互而導致的開發難度大,開發門檻高等問題。KMDF是WINDOWS 7/8首先的驅動模型。

PCI Express是一種應用于各種計算與通信平臺的高性能、通用、串行 I/O 互連協議。它采用包交換技術、Ack/Nak協議以及流量控制技術,實現報文的高速高可靠傳輸。此外,PCI Express協議保持與現有 PCI 設備的軟件兼容性,而且可以用較低的開銷提升現有 PCI 系統的性能,在 PC 機及嵌入式系統中得到了廣泛的應用。因此研究基于KMDF驅動框架的PCI Express驅動設計具有現實意義。

本文介紹KMDF的對象模型和I/O模型,并介紹一種基于KMDF的PCI Express設備驅動程序的設計。

1 KMDF模型

1.1 KMDF對象模型

KMDF是內核模式驅動開發的框架,它定義了基于對象的編程模型,可以通過一系列層次化組織的對象以及與對象相關聯的方法和屬性來表示設備、驅動、隊列等信息。KMDF對象模型中定義的主要的對象以及其層次如圖1所示:

圖1 KMDF中的主要對象及其層次

圖1中KMDF框架定義的主要對象有:

(1)WDFDRIVER:WDF驅動對象,所有對象的根對象,描述一個驅動程序在內存的實例,維護驅動程序的相關信息,如驅動的入口點,加載位置,可以管理的設備等。每一個驅動程序在內存中有且僅有一個WDFDRIVER對象。

(2)WDFDEVICE:WDF設備對象,系統中具體硬件的抽象,代表驅動程序可以控制的硬件設備,用戶程序可以通過定義的設備接口訪問設備。WDFDEVICE也可以是虛擬設備。

(3)WDFQUEUE:WDF隊列對象,一個特殊的I/O請求隊列,它定義了一系列回調函數,當I/O請求進入隊列時,框架將自動調用對應的回調函數處理。

(4)WDFINTERRUPT:WDF中斷對象,定義了設備中斷使能,禁止回調函數和設備中斷的服務程序和DPC例程。

1.2 KMDF I/O模型

KMDF建立了自己的I/O模型,可以截獲發送給本設備驅動程序的所有IRP。當IRP到達時,分發器根據IRP的主功能碼把IRP分發到I/O請求隊列或者電源管理隊列,框架會在適當的時間自動的調用已經注冊的回調函數。I/O流程如圖2所示:

圖2 I/O通過KMDF庫和驅動程序流程

KMDF的I/O隊列管理那些針對驅動程序的請求。驅動程序通常創建一個或多個隊列,每個隊列可以接受一種或多種類型的請求。調度方法決定給定時間內驅動程序可服務的請求數量。

2 PCI Express高速數據處理卡

PCI Express作為高速串行I/O技術已經在現行的計算機系統得到了廣泛應用,本文涉及的PCI Express板卡是自行研發的基于Altera公司PCI Express硬核設計的高速數據處理系統。該系統的框架圖如圖3所示:

系統采用Altera 公司的Cyclone IV GX 系列FPGA芯片作為核心,使用FPGA中的硬件電路完成對下發數據的處理。FPGA主要模塊功能介紹:

圖3 系統框架圖

PCI-E IP硬核:實現PCI Express 1.1版本協議,完成PC機地址域與設備內部地址域轉換,DMA通過IP硬核接口與PC機通信。IP硬核是完成計算機系統和數據處理卡系統通信的橋梁。

CPU:采用Altera公司NIOS II軟核實現,作為PCI Expess設備的主控模塊,根據RAM緩沖區的數據包頭,啟動相應的算法模塊;或者根據算法模塊的結束信號啟動一次DMA傳輸。

DMA以及RAM:DMA實現數據的高速傳輸,提高系統的效率;RAM數據的緩沖區,在每次運算過程緩存帶運算數據以及運算結果。

數據處理:系統的功能模塊,實現具體的數據處理算法,由CPU調度。

3 PCI Express高速處理卡驅動實現

PCI Express是與PCI軟件兼容的系統總線,PCI Express具有與PCI總線相同的軟件訪問接口,因此可以使用與PCI相同的軟件流程。

本文介紹的PCI Express高速處理卡的驅動流程如圖4所示。

3.1 驅動程序初始化

KMDF設備驅動程序初始化與WDM初始化入口相同,均為NTSTATSU DriverEntry(INPDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)函數[7],但是函數主要完成的功能并不相同,在WDM中主要完成驅動的回調函數設置,而在KMDF中則主要完成驅動對象的創建,即WDFDRIVER對象的創建,WDFDRIVER對象是對WDM中DRIVER_OBJECT對象的封裝,創建WDFDRIVER對象時需要提供創建WDFDEVICE對象的回調函數和驅動的卸載例程的回調函數,以及屬于驅動對象的屬性。在KMDF中并不允許直接對框架創建的對象賦值,需要由專門的對象配置來實現。

圖4 驅動流程圖

對于KMDF中涉及的所有內核對象都可以在創建時指定一個屬于對象的環境變量結構,和獲得環境變量的方法名字,該環境變量的信息存儲在對象屬性結構里,由框架在對象創建時使用。主要代碼如下:

WDF_DRIVER_CONFIG_INIT

(&config,UsbDataTransAdd);

//配置參數初始化,主要用來設置添加設備函數UsbDataTransAdd,此函數由框架在每次枚舉屬于驅動程序的設備時調用。

status = WdfDriverCreate(DriverObject,

RegistryPath,

WDF_NO_OBJECT_ATTRIBUTES,

&config,

WDF_NO_HANDLE);

//創建驅動對象,其中DriverObject由框架傳遞來的WDM驅動對象,RegistryPath是注冊表中的服務鍵路徑,config為已經初始化的對象配置。

3.2 設備對象的創建

在驅動初始化以后,或者設備被首次枚舉,系統都會調用驅動對象中設置的添加設備程序,設備添加例程主要的職責是:創建設備對象、一個或多個I/O隊列和設備GUID接口,設置各種事件回調函數,以及創建中斷對象。主要函數如下:

WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&pnpPowerCallbacks);

//初始化即插即用和電源管理例程配置結構,該結構只有在初始化后才在可以使用,并且該結構的初始化必須在設備對象創建之前完成。

WdfDeviceCreate(&DeviceInit, &deviceAttributes, &device);

//創建設備對象。

WDF_INTERRUPT_CONFIG_INIT(

&interruptConfig,

PCISample_EvtInterruptIsr,

PCISample_EvtInterruptDpc);

//設置中斷例程和延時過程函數

WdfInterruptCreate(

device,

&interruptConfig,

WDF_NO_OBJECT_ATTRIBUTES,

&pDeviceContext->Interrupt);

//創建中斷對象。

WdfDeviceCreateDeviceInterface(

device, (LPGUID)&PCI_DEVINTERFACE_GUID, NULL);

//設置內核驅動與應用態的接口其中PCI_DEVINTERFACE_GUID是應用程序尋找驅動的標識碼,可使用Visual Studio中自帶的GUID生成器生成。

3.3 訪問PCI Express卡硬件寄存器

KMDF設備驅動模型為分層模型,最底層為PCI Express總線驅動由操作系統提供,總線驅動上層才是我們提供的特定設備的設備驅動。在PCI Express設備驅動初始化時,由總線驅動通過IO端口CONFIG_ADDRESS(地址0CF8~0CFB),CONFIG_DATA(地址0CFC~0CFF)獲取配置空間設備資源信息[8],將資源信息記錄到設備對象的設備環境中,并且映射PCI Express配置空間BAR寄存器里描述的PCI Express內存到PC機內存空間,以使得驅動程序可以使用簡單的內存訪問函數直接訪問設備空間。

在創建設備對象時注冊的例程PcieDevicePrepareHardware會在設備進入工作狀態之前由框架調用完成對硬件資源的獲取,并且會在即將進入D0時對硬件進行一些配置,相關的主要代碼:

case CmResourceTypeMemory:

{

momeryflag = TRUE;

pDevicecontext->MemBaseAdd=

MmMapIoSpace(

escriptor->u.Memory.Start,

descriptor->u.Memory.Length,

MmNonCached);

pDevicecontext->MemLength =

descriptor->u.Memory.Length;

pDevicecontext->PhysicalAdd=

descriptor->u.Memory.Start;

break;

}

//獲取PCI Express設備在PC內存空間的地址并使用MmMapIoSpace函數將其轉換成可被直接訪問的內核態虛擬地址。

case CmResourceTypeInterrupt:

{ASSERT(descriptor->Flags!=

CM_RESOURCE_INTERRUPT_MESSAGE)break;}

在本設計中主要獲取兩種資源:

(1)CmResourceTypeMemory內存映射地址空間:PCI Express協議通過BAR映射FPGA電路控制寄存器到計算機系統的硬件地址空間,使得我們可以使用內存訪問的方式直接訪問FPGA硬件。

(2)中斷資源:在WDM模型中,我們在必須獲得分配給此設備的中斷號以及此設備支持的中斷方式等中斷資源,以此為信息注冊本設備的中斷。但是在KMDF中這些已經被框架所實現,所以中斷資源變得可有可無。

訪問內存映射地址空間時可以用KMDF提供的專用函數WRITE_RESISTER_xx、READ_RESISTER_xx系列函數讀寫該空間對應的虛擬地址或者使用一般的內存訪問函數直接訪問該空間對應的虛擬地址。

3.4 數據的傳輸控制

本系統對數據的傳輸主要采用DMA實現,通過兩個DMA實現數據的上行和下行,在本系統主要要求傳輸速度的前提下,本設計采用了把DMA控制和緩沖區映射到應用層,由應用程序直接控制DMA傳輸過程,以減少程序在狀態切換上的開銷。涉及的主要代碼如下:

pDevicecontext->mdlcard=IoAllocateMdl(

pDevicecontext->UserMemBase1, pDevicecontext->UserMemLength1,

FALSE, FALSE, NULL);

MmBuildMdlForNonPagedPool(dx->mdlcard);//分配MDL結構,其中dx->UserMemBase1為在PcieDevicePrepareHardware例程得到的硬件資源。

pDevicecontext->usercard= MmMapLockedPagesSpecifyCache

(pDevicecontext->MemBaseAdd,

UserMode,

MmNonCached,

NULL, FALSE,

NormalPagePriority);

//映射硬件資源到應用態空間,pDevicecontext->MemBaseAdd存儲DMA控制寄存器空間基地址;pDevicecontext->usercard為得到的用戶空間地址,在合適的時機傳回應用態。

pDevicecontext->mdldma=

IoAllocateMdl(pDevicecontext->vaCom

monBuffer,

SJY0601_MAXTRANSFER,

FALSE,FALSE, NULL);

MmProbeAndLockPages

(pDevicecontext->mdldma,

KernelMode,

IoModifyAccess);

pDevicecontext->userdma= MmMapLockedPagesSpecifyCache

(pDevicecontext->mdldma,

UserMode,

MmNonCached,

NULL,FALSE,

NormalPagePriority);

//其中pDevicecontext->mdldma為DMA緩沖區基地址,由應用程序直接讀寫。

3.5 實驗結果與分析

經測試,本文所述的基于KMDF模型的PCI Express 數據處理系統驅動在DMA 傳輸模式下處理數據速度可達 3024 Mbits/s(包括下發數據,數據簡單處理,數據上發),且在壓力測試的100小時里程序能穩定、可靠地工作。

4 結語

本文所述的PCI Express設備驅動程序,使用了KMDF模型,該模型提供了面向對象、事件驅動的驅動程序開發框架,由框架負責管理與操作系統內核相關的功能,不但使得驅動程序的編寫簡單方便而且可靠性和穩定性提高。同時本文所述的驅動使用了內核態到應用態地址映射的技術,所有數據均由應用程序直接寫入設備,大幅度減少CPU狀態轉換帶來的開銷,提高系統的整體速度。綜上所述這樣的設計具有較傳統設計更優的性能。

[1] 李正平,徐超,陳軍寧,等.WDF驅動程序的設計與實現[J].計算機技術與發展,2007(5):227-230.

[2] 馬晨,陳彥萍.基于PCI Express總線 1394b 網絡傳輸系統WDM驅動設計[J].測控技術,2012,32(3):93-97.

[3] 武安河.Windows設備驅動程序WDF開發[M].北京:電子工業出版社,2009:3-11.

[4] 王祥.基于FPGA的PCI-E數據采集系統的設計與實現[D].成都:電子科技大學,2012:1-5.

[5] 季喬龍.基于WDF的加密卡驅動程序開發及密鑰管理[D].成都:電子科技大學,2012:10-11.

[6] Ronald D Reeves.Windows 7設備驅動程序開發[M].張猛,紀小玲,周姝嫣,譯.北京:人民郵電出版社,2012:95-95.

[7] 黎紹秀,衛紅,蘭春嘉. PCI- E 圖像采集系統的 WDF 驅動程序設計[J].科學技術與工程, 2011,11(16):3824-3827.

[8] 王齊.PCI Express體系結構導讀[M].北京:機械工業出版社,2011:123-123.

猜你喜歡
設備模型
一半模型
諧響應分析在設備減振中的應用
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
基于VB6.0+Access2010開發的設備管理信息系統
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
3D打印中的模型分割與打包
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
FLUKA幾何模型到CAD幾何模型轉換方法初步研究
如何在設備采購中節省成本
主站蜘蛛池模板: 亚洲国产综合自在线另类| 99热这里只有精品在线观看| 婷婷六月综合| 亚洲美女AV免费一区| 久久这里只有精品66| 在线看片中文字幕| 亚洲成A人V欧美综合天堂| 婷婷色狠狠干| 亚洲视频免| 国产精品yjizz视频网一二区| 91偷拍一区| 亚洲啪啪网| 亚洲 欧美 偷自乱 图片| 乱人伦99久久| 国产精品女人呻吟在线观看| 亚洲欧洲自拍拍偷午夜色| 国产成人超碰无码| 国产成人a在线观看视频| 亚洲人成网线在线播放va| 欧美黄网站免费观看| 国产高清不卡| 成人国产免费| 最新加勒比隔壁人妻| 99ri精品视频在线观看播放| 日韩欧美视频第一区在线观看| 亚洲男人的天堂在线观看| 天天综合网色| 在线永久免费观看的毛片| 国产丝袜丝视频在线观看| 欧美在线导航| 亚洲区第一页| 伊人福利视频| 欧美天堂在线| 亚洲三级a| 国产99视频精品免费观看9e| 日韩欧美国产综合| 亚洲第一成年人网站| 18禁黄无遮挡免费动漫网站| 国产精品大尺度尺度视频| 成人免费黄色小视频| 国产成人a在线观看视频| 国产在线啪| 91视频青青草| 国产亚洲精品自在久久不卡| 日韩欧美中文亚洲高清在线| 91福利一区二区三区| 红杏AV在线无码| 国产久操视频| 无码免费视频| 理论片一区| 国产免费观看av大片的网站| 五月婷婷伊人网| 久久综合九色综合97婷婷| 国产免费羞羞视频| 免费在线看黄网址| 啪啪永久免费av| 在线观看亚洲成人| 婷婷五月在线| 亚洲欧美精品一中文字幕| 亚洲伊人电影| 综合色在线| 中文字幕调教一区二区视频| 国产亚洲美日韩AV中文字幕无码成人| 免费又黄又爽又猛大片午夜| 免费中文字幕在在线不卡| 欧美中文字幕在线二区| 911亚洲精品| 欧美a在线看| 九九热精品视频在线| 亚洲欧洲日韩综合色天使| 欧美日本在线播放| 国产91全国探花系列在线播放 | 麻豆国产精品| 国产无遮挡猛进猛出免费软件| 成人av手机在线观看| 国产精品美女网站| 亚洲中文字幕av无码区| 国产极品美女在线观看| 18禁影院亚洲专区| 91福利片| 在线免费不卡视频| 国产精品成人一区二区不卡 |