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

自動測試儀器硬件板卡識別技術研究

2011-04-26 02:31:12錢光弟
中國測試 2011年3期
關鍵詞:設備

田 娜,錢光弟,李 力

(電子科技大學自動化工程學院,四川 成都 611731)

0 引 言

自動測試系統中,因同一個系統的不同板卡有不同的PID和VID,所以設備驅動通常使用PID和VID來識別設備。但這種方法會導致硬件使用過程復雜化,同時也不利于硬件升級。該文提出了一種通過對板卡的位置信息來識別同類硬件設備的識別技術。同類設備具有相同的PID和VID,可以在設備管理器中查詢硬件的位置信息(如總線號、功能號和設備號等)。通過這3個位置信息可以區分同類板卡,這種方法利于硬件的升級和簡化了板卡使用的過程。以PCI板卡為例說明硬件在PC機的加載識別過程,介紹軟件識別的概念及驅動和應用程序的編寫。

1 PCI板卡加載過程

以PCI板卡設備為例,對硬件在PC機的加載識別過程加以說明。PCI板卡設備插入機箱后,CPU在系統初始化階段(POST)為各個PCI設備進行資源分配。資源分配完畢后,PCI設備的驅動程序根據PCI Vendor Id和 Device Id以及 Revison Id進行PCI總線搜索,查看是否存在符合本驅動的設備。找到設備后,驅動程序根據板卡的硬件設計情況,進行相應的寄存器初始化和中斷掛載工作。

因為PCI總線的資源分配是在POST過程中動態分配的,所以根據系統配置不同,各板卡所分配的資源也不相同(即所謂PnP-即插即用)。

PCI總線搜索通常是按深度優先的順序進行搜索。如果有同種型號的PCI設備存在于PCI總線上,設備驅動應依次對板卡設備進行初始化。而當多個板卡實例采用同一驅動時,驅動程序對各個板卡的區分僅僅是對其總線位置信息的區分。通過驅動程序可以獲取以下信息:(1)驅動程序可以驅動的PCI設備數量(在總線上找Id符合的PCI設備數量);(2)PCI設備占用的系統資源(包括IO,MEM地址,IRQ及這些設備所在的總線位置信息-PCI總線x,Device y,Function z)。由此可見,雖然系統資源分配不固定,但是PCI設備位置固定。該文所述驅動通過PCI板卡的位置信息來訪問同類板卡設備。

2 識別

識別就是獲得硬件的設備句柄。設備句柄是用于標識設備的一個標識符,是在Windows操作系統中用來標識被應用程序所建立或使用的硬件對象的唯一整數。

應用程序通過調用一個API函數CreateFile來獲得一個設備句柄,之后其他的函數就可以使用該設備句柄來訪問設備。

由于同一個PC機每個硬件的句柄不同,在Windows操作系統中,用戶需要獲得硬件設備的句柄,才能調用驅動程序。驅動程序是一個獨立的黑盒,在操作系統中扮演著特殊的角色,它是應用程序和硬件之間通信的橋梁。

3 WDM驅動模型

該驅動基于微軟提出全新的WDM驅動模型開發,支持即插即用、電源管理和WMI驅動。WDM驅動主要例程如圖1所示。

圖1 WDM主要例程

WDM驅動程序就是一些例程的集合體,它們被動地存在,等待主機系統軟件來調用或激活。不同的驅動程序完成的功能不同,其所包含的例程也不同,下面介紹WDM驅動程序中常用的6個例程[1]:

(1)入口例程。內核模式驅動程序入口點,I/O管理程序在驅動程序首次裝入時調用該例程。入口例程執行所有的第1次初始化任務。

(2)即插即用例程。處理PnP設備的添加、刪除和停止,它將自動在系統中找到一個未被占用或沒有沖突的中斷地址分配給新添加的硬件設備,而不需要人工干預。

(3)AddDevice例程。對于參與即插即用的WDM驅動程序來講,完成硬件分配。

(4)分發例程。處理用戶應用程序發出的各種I/O請求,分發例程處理IRP,或者通過判斷IRP來調用相應的例程。

(5)電源管理例程。處理電源管理請求。

(6)Unload卸載例程。處理驅動程序的卸載。

4 多卡識別驅動編寫

4.1 AddDevice例程

在WDM的驅動中,每個硬件板卡對應一個設備實例,PnP管理器為每個設備實例調用AddDevice例程,并創建一個設備對象把它連接到以Pdo為(物理設備)底的設備堆棧中[2]。

AddDevice例程有一個輸入參數Pdo,是由底層驅動創建的的物理設備對象。在這個例程中調用DDK函數IoGetDeviceProperty,通過改變此函數的第2個參數,即可返回設備的總線號、設備號和功能號。典型代碼如下:

將得到的板卡設備、功能號,保存在m_ulUINumber變量中,其中高16位是設備號,低16位是功能號。將 IoGetDeviceProperty(Pdo,

得到板卡的總線號,保存在m_ulUINumber變量中。把讀回來的設備號、功能號和總線號放在全局變量中,以便以后識別使用。

4.2 分發例程

分發例程主要指“打開”、“創建”、“讀”、“寫”、“IOCTL”、“關閉”等處理程序,它可以執行對IRP的初始化,并檢查參數的合法性。模塊中內核模式驅動程序需要處理的IRP主要有寫例程向硬件發送命令、讀例程讀取硬件寄存器、IOCTL例程用作多卡識別。

在驅動層創建一個控制碼為READ_SLOT的IOCTL例程,專門用于傳遞板卡的位置信息。驅動層通過應用層發下來的控制碼來識別上層需要進行的操作。在控制碼為READ_SLOT的IOCTL例程中,把AddDevice讀取的放在全局變量中的板卡總線號、設備號和功能號,通過METHOD_BUFFERED的方式傳給應用層。

5 多卡識別應用層編寫

5.1 驅動層與應用層的接口

用戶模式驅動程序通過Win32應用程序與內核進行通信,為保護知識產權和方便程序的升級與維護,用戶模式驅動程序通常用“DLL”的方式實現。由于運行在用戶態,它和內核模式驅動程序的通信過程實質上是應用程序和WDM驅動程序的通信過程[3]。

在Windows系統中,應用程序實現與WDM驅動程序的通信過程如下:首先應用程序用CreateFile函數打開設備,然后調用ReadFile從驅動程序中讀數據或用WriteFile寫數據給驅動程序,也可以用DeviceIoControl和驅動程序進行通信。當應用程序退出時,調用CloseHandle關閉設備[4]。這將產生對應于此設備對象相應的IRP,見表1所示。

表1 Win32函數與IRP的對應關系

5.2 多卡設備句柄的獲得

Win32API對設備進行“打開”和“關閉”操作,在其打開設備時,必須先獲得設備句柄。

在Windows系統中,使用對象管理器集中管理系統中大量的內部數據結構,包括驅動程序對象和設備對象。因對象的名稱不同,為了便于區別對象,對象管理器通過一個層次化的命名空間來管理這些對象名稱。通常設備對象都把自己的名字放到Device目錄中。在DriverWorks工程創建時可以指定應用程序打開設備的方式為GUID接口或符號鏈接名,獲得設備句柄。

5.2.1 GUID接口

這是微軟在設計WDM框架時引入的一個新的命名方案,該方案與任何自然語言無關,且易于擴展和歸檔。一個設備接口由唯一的128位的GUID標識。由于采用了獨特的生成算法,永遠也不用擔心重復出現GUID的情況,這樣一個GUID就唯一標識了一種設備接口。但這種操作方式增加了代碼量,同時操作比較復雜,不易采用這種方式[5]。

5.2.2 符號鏈接

應用程序要訪問該設備必須事先知道它的名字,否則不能訪問。這在測試用的設備或私有設備上是可以的。這種方式操作簡單,只適合特定的平臺[6]。

用連接名在應用層用CreateFile打開設備時,每個連接名的后綴從零開始表示打開某類設備的第幾個實例,一個實例代表一個板卡。例如,板卡的符號連接為xxxDevice,第1個實例叫xxxDevice0,第2個實例叫xxxDevice1,以此類推,典型代碼如下:

第0個例程后綴為0:

hDevice是返回的硬件設備句柄。柄之后通過句參數hDevice調用控制碼為READ_SLOT的IOCTL例程,獲得硬件位置信息,主要代碼如下:

圖2 獲取句柄流程圖

把驅動加載過程中得到總線號、設備號和功能號來傳給應用層,返回的值放在BufOutput中。在應用層與用戶所指定的板卡參數相比較,確定板卡的位置,如果符合就返回句柄,不符合關閉句柄繼續往下找,直到找到指定的板卡為止,流程如圖2所示。得到每個板卡的句柄以后,就可以分別對板卡進行操作,之間不會相互影響。

6 調 試

編寫驅動,調試是一個棘手的問題。因為驅動程序運行在內核模式下,很難像一般有集成的開發環境的Win32程序一樣進行單步調試。一般來說,驅動的調試主要有2個途徑:(1)在關鍵的地方打印出調試信息,用DriverMoniter來查看;(2)內核調試工具。在該文中采用第(1)種方法調試[7]。

7 結束語

該文介紹的板卡識別方法,在原有PID和VID識別的基礎上,改進了硬件識別方法,通過位置信息尋找硬件,簡化了硬件的操作過程,在驅動和應用程序方面做了改進,開發出適合多板卡公用的驅動程序,為硬件和驅動的設計帶來了很大的方便。

[1] 楊軍.DriverStudio開發WDM設備驅動程序入門[M].北京:電子工業出版社,2004:34-40.

[2]武安河.Windows2000/XP WDM設備驅動程序開發[M].北京:電子工業出版社,2005:1-65.

[3]Foltz F.Microsft Windows驅動程序模型設計[M].馬少華,譯.北京:清華大學出版社,2004:45-120.

[4] 吳宏鋼,尹愛軍,秦樹人.基于WDM模型的PCI數據采集卡驅動程序設計[J].中國測試技術,2008,34(4):52-55.

[5] 武安河.Windows設備驅動程序[M].北京:電子工業出版社,2001:42-148.

[6]孫毅.Windows WDM設備驅動程序開發指南[M].北京:電子工業出版社,2001:1-100.

[7]張帆,史彩成.Windows驅動開發技術詳解[M].北京:電子工業出版社,2009:411-424.

猜你喜歡
設備
諧響應分析在設備減振中的應用
調試新設備
當代工人(2020年13期)2020-09-27 23:04:20
基于VB6.0+Access2010開發的設備管理信息系統
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
廣播發射設備中平衡輸入與不平衡輸入的轉換
電子制作(2018年10期)2018-08-04 03:24:48
食之無味,棄之可惜 那些槽點滿滿的可穿戴智能設備
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
HTC斥資千萬美元入股虛擬現實設備商WEVR
IT時代周刊(2015年8期)2015-11-11 05:50:37
Automechanika Shanghai 2014 之“看” 汽保設備篇
如何在設備采購中節省成本
主站蜘蛛池模板: 伊人91视频| 中日无码在线观看| 91国内在线观看| 亚洲 欧美 日韩综合一区| 一级看片免费视频| 欧美激情成人网| 亚洲精品动漫在线观看| 99视频国产精品| 日本三级精品| 成年人国产网站| 久久精品无码中文字幕| 免费又爽又刺激高潮网址| 超薄丝袜足j国产在线视频| 日韩精品欧美国产在线| 日本成人福利视频| 91视频日本| 直接黄91麻豆网站| 亚洲成网站| 一级一毛片a级毛片| 日本国产精品一区久久久| 久久久久无码精品国产免费| 亚洲va欧美va国产综合下载| 伊人久久大香线蕉影院| 亚洲欧美成人在线视频| 嫩草在线视频| 欧美日韩亚洲国产| 成人亚洲视频| 久久精品视频一| 天天综合网亚洲网站| 免费看a级毛片| 天堂在线亚洲| 国产成人精品一区二区三区| 嫩草国产在线| 亚洲精品不卡午夜精品| 乱系列中文字幕在线视频| 国产成人高清精品免费5388| 香蕉eeww99国产在线观看| 亚洲日本在线免费观看| 996免费视频国产在线播放| 免费A∨中文乱码专区| 性欧美精品xxxx| 97se亚洲综合在线天天| 欧美自拍另类欧美综合图区| 国产一区二区精品福利| 欧美国产综合色视频| 毛片免费在线视频| 成人国产小视频| 成年人国产视频| 国产乱子伦精品视频| 亚洲一区二区黄色| 色哟哟国产精品一区二区| 在线精品视频成人网| 亚洲AV成人一区二区三区AV| 国产成人凹凸视频在线| 亚洲区第一页| 亚洲第一成年免费网站| 国产在线观看人成激情视频| 污污网站在线观看| 国产三区二区| 日本AⅤ精品一区二区三区日| 成人国产精品一级毛片天堂| 国产福利一区在线| a亚洲视频| 欧美v在线| 日韩久草视频| 国产无码制服丝袜| 色综合a怡红院怡红院首页| 成人福利在线看| 亚洲国产欧美国产综合久久| 国产成人三级| 国产亚洲美日韩AV中文字幕无码成人| 欧美一级高清视频在线播放| 亚洲天堂日韩在线| 狠狠亚洲五月天| 亚洲国产综合自在线另类| 中文字幕乱妇无码AV在线| 亚洲高清无码精品| 亚洲欧洲日韩综合色天使| 国产区免费| 国产精品页| 日本一本在线视频| 国产精品爽爽va在线无码观看|