欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
用WDM開(kāi)發(fā)USB驅動(dòng)程序
引言

USB,全稱(chēng)是Universal Serial Bus(通用串行總線(xiàn)),它是一些PC大廠(chǎng)商,如Microsoft、Intel、康柏等為了解決日益增加的PC外設與有限的主板插槽和端口之間的矛盾而制定的一種串行通信的標準,自1995年在Comdex上亮相以來(lái)至今已廣泛地為各PC廠(chǎng)家所支持?,F在生產(chǎn)的PC幾乎都配備了USB接口,Microsft的Windows98、NT以及MacOS、Linux、FreeBSD等流行操作系統都增加了對USB的支持。

它有以下主要優(yōu)點(diǎn):

·速度快。USB有高速和低速兩種方式,主模式為高速模式,速率為12Mbps,另外為了適應一些不需要很大吞吐量和很高實(shí)時(shí)性的設備,如鼠標等,USB還提供低速方式,速率為1.5Mb/s。
·設備安裝和配置容易。安裝USB設備不必再打開(kāi)機箱,加減已安裝過(guò)的設備完全不用關(guān)閉計算機。所有USB設備支持熱插拔,系統對其進(jìn)行自動(dòng)配置,徹底拋棄了過(guò)去的跳線(xiàn)和撥碼開(kāi)關(guān)設置。
·易于擴展。通過(guò)使用Hub擴展可撥接多達127個(gè)外設。標準USB電纜長(cháng)度為3m(5m低速)。通過(guò)Hub或中繼器可以使外設距離達到30m。
·能夠采用總線(xiàn)供電。USB總線(xiàn)提供最大達5V電壓、500mA電流。
·使用靈活。USB共有4種傳輸模式:控制傳輸(control)、同步傳輸(Synchronization)、中斷傳輸(interrupt)、批量傳輸(bulk),以適應不同設備的需要。


WDM驅動(dòng)程序的介紹

設備驅動(dòng)程序就是控制硬件設備的一組函數。在Windows環(huán)境下,如果要處理硬件中斷,實(shí)現DMA操作,就一定要用到設備驅動(dòng)程序,開(kāi)發(fā)即插即用(PnP)設備(如USB接口設備、PCI接口卡)更是這樣。

WDM(Win32 Driver Model)是Microsoft公司力推的全新的驅動(dòng)程序模式,它的應用平臺是Windows 98/Me/2000操作系統,不久的將來(lái),在Windows平臺上,WDM將成為主流的驅動(dòng)模式。

WDM驅動(dòng)程序是分層的,不同層上的驅動(dòng)程序有不同的優(yōu)先級。另外,WDM還引入了功能設備對象FDO(Function Device Object)與物理設備對象PDO(Physical Device Object)兩個(gè)新類(lèi)來(lái)描述硬件,一個(gè)PDO對應一個(gè)真實(shí)的硬件。一個(gè)硬件只允許有一個(gè)PDO,卻可以擁有多個(gè)FDO,在驅動(dòng)程序中直接操作的不是硬件而是相應的PDO和FDO。

WDM不是通過(guò)驅動(dòng)程序名稱(chēng),而是通過(guò)一個(gè)128位的全局唯一標識符(GUID)實(shí)現驅動(dòng)程序的識別。在應用程序與WDM驅動(dòng)程序通信方面,系統為每一個(gè)用戶(hù)請求打包形成一個(gè)I/O請求包(IRP)結構,并將其發(fā)送到驅動(dòng)程序,并通過(guò)識別IRP中的PDO來(lái)區別是發(fā)送給哪一個(gè)設備的。內核通常通過(guò)發(fā)送IRP來(lái)運行驅動(dòng)程序的代碼。WDM驅動(dòng)程序完全支持即插即用。

一個(gè)WDM驅動(dòng)程序的功能模塊可由以下幾個(gè)部分組成:
·驅動(dòng)程序初始化。
·創(chuàng )建和刪除設備。
·處理Win32程序打開(kāi)和關(guān)閉句柄的請求。
·處理Win32程序輸入/輸出請求。
·實(shí)現對設備的串行化訪(fǎng)問(wèn)。
·訪(fǎng)問(wèn)硬件。
·取消I/O請求。
·超時(shí)I/O請求。
·調用其他驅動(dòng)程序。
·處理電源管理請求。
·使用Windows管理診斷(WMI)向系統管理員報告。
·處理一個(gè)可熱插拔的設備被加入或刪除的情況。

WDM驅動(dòng)程序有一個(gè)主要的初始化入口點(diǎn),即一個(gè)稱(chēng)為DriverEntry的例程,它有一個(gè)標準的函數原型,當WDM驅動(dòng)程序被裝入時(shí),內核調用DriverEntry例程。所有對各種IRP的處理例程都在此入口函數中做出定義。

大多數的WDM設備對象,都是在即插即用管理器調用AddDevice例程入口點(diǎn)被創(chuàng )建的。插入新設備后,當系統找到由安裝信息所指示的驅動(dòng)程序時(shí),這個(gè)例程調用在此之后,一系列的即插即用IRP被發(fā)送到驅動(dòng)程序,設備驅動(dòng)程序可進(jìn)行相應的功能處理。

開(kāi)發(fā)WDM驅動(dòng)程序有兩種方法,一種利用微軟提供的98DDK和2000DDK驅動(dòng)程序開(kāi)發(fā)包,另外一種是專(zhuān)用驅動(dòng)程序開(kāi)發(fā)工具,如Compuware Numega公司的DriverStudio,KRF, Tech公司的WinDriver。后者給出驅動(dòng)程序的框架,并對DDK中操作進(jìn)行封裝,因此減少了開(kāi)發(fā)時(shí)間,提高了效率。我們選用了DriverStudio開(kāi)發(fā)工具開(kāi)發(fā)USB驅動(dòng)程序。


USB 啟動(dòng)的過(guò)程

在介紹USB程序設計之前,我們需要先了解它的啟動(dòng)過(guò)程。
USB系統主要由主控制器(Host Controller)、USB Hub 和USB外設(Peripherals Node)組成系統拓撲結構,如圖1所示。

在應用程序可以與一個(gè)USB設備通信之前,主機需要知道設備支持哪些傳輸類(lèi)型和終端,主機也必須分配一個(gè)地址給設備,主機通過(guò)一個(gè)被稱(chēng)為枚舉的信息交換來(lái)完成這些工作 。枚舉過(guò)程:集線(xiàn)器的一個(gè)任務(wù)就是檢測設備的連接與斷開(kāi),每個(gè)集線(xiàn)器都有一個(gè)中斷流程來(lái)通知主機報告這些事情。在系統啟動(dòng)的時(shí)候,主機查詢(xún)它的根集線(xiàn)器來(lái)了解有哪些設備已經(jīng)連接上了,包括其他集線(xiàn)器和連接到這些集線(xiàn)器的設備。在啟動(dòng)后,主機持續周期性地查詢(xún)了解是否有設備連接或斷開(kāi)。

圖1:USB總線(xiàn)的拓樸結構
圖2:軟件結構框圖

一旦發(fā)現一個(gè)新設備,主機發(fā)送一系列的請求給這個(gè)設備的集線(xiàn)器,使這個(gè)集線(xiàn)器在主機和這個(gè)設備之間建立一個(gè)通信渠道。然后主機試圖枚舉這個(gè)設備,枚舉是使得主機的設備驅動(dòng)程序能與這個(gè)設備通信的最基本的信息交換 。這個(gè)過(guò)程由如下動(dòng)作組成:分配一個(gè)地址給設備,從設備讀取描述數據,分配和載入一個(gè)設備驅動(dòng)程序以及從接收到的數據中選擇一個(gè)配置。然后設備就被配置完畢,并且準備好使用它的配置中支持的任何終端來(lái)傳輸數據。

主機的枚舉是通過(guò)給終端0發(fā)送包含標準USB請求的控制傳輸。所有的USB設備必須支持控制傳輸、標準USB請求和終端0。對一個(gè)成功的枚舉來(lái)說(shuō),設備必須對每一個(gè)請求響應并返回請求的信息。

從用戶(hù)的角度看,枚舉應該是不可見(jiàn)和自動(dòng)的,除了一些情況下如申明發(fā)現一個(gè)新設備和是否成功配置這個(gè)新設備的窗口,有時(shí)在第一次使用時(shí),用戶(hù)需要提供一個(gè)有INF文件和設備驅動(dòng)程序的磁盤(pán)。

當枚舉結束時(shí),Windows把新的設備加入到控制面板的設備管理器顯示中。應依次單擊"開(kāi)始"菜單(Start menu)->設置(Settings)->控制面板(Control Pannel)->設備管理器(Device Manager),在設備管理器可以看到新加的設備。當一個(gè)用戶(hù)斷開(kāi)一個(gè)外設的連接時(shí),Windows自動(dòng)地從這個(gè)顯示中移掉這個(gè)設備。

在一個(gè)USB的外設中,外設的程序代碼包含了主機將請求的信息,并且程序代碼必須能識別和響應這些信息的請求。在Windows不需要編寫(xiě)枚舉的程序,因為Windows自動(dòng)處理枚舉過(guò)程。Windows將查找一個(gè)被稱(chēng)為INF文件的特殊文本文件,這個(gè)文件會(huì )告訴Windows哪個(gè)驅動(dòng)程序適合這個(gè)設備。


USB接口軟件結構

USB接口軟件結構如圖2所示。PC機底層驅動(dòng)程序包括HUB驅動(dòng)、總線(xiàn)類(lèi)驅動(dòng)和主機控制器驅動(dòng),它們負責處理總線(xiàn)枚舉、電源管理,以及USB事務(wù)的其它方面,這些驅動(dòng)不需要編程者開(kāi)發(fā),Windows操作系統提供這類(lèi)驅動(dòng)程序。編程者需要開(kāi)發(fā)的程序為:USB控制器固件程序,控制器的接收應用程序,設備功能驅動(dòng)程序, PC機應用程序。

USB控制器固件程序實(shí)現設備的枚舉以及端點(diǎn)與主機的通信??刂破鞯慕邮諔贸绦蚪邮罩鳈C下載的文件。 設備功能驅動(dòng)程序為應用程序和底層驅動(dòng)程序之間提供接口。當一個(gè)應用程序啟動(dòng)一個(gè)API調用后,Windows把調用傳遞給設備驅動(dòng)程序,設備驅動(dòng)程序把請求傳遞到底層驅動(dòng)程序,底層驅動(dòng)程序對硬件進(jìn)行相應的操作。PC機應用程序功能是實(shí)現主機文件的下載。


USB驅動(dòng)程序的介紹

USB驅動(dòng)程序的編寫(xiě)必須采用WDM驅動(dòng)程序。對于USB設備來(lái)說(shuō),其驅動(dòng)程序可分為USB底層驅動(dòng)程序和USB功能驅動(dòng)程序。USB底層驅動(dòng)程序由操作系統提供,它位于USB功能驅動(dòng)程序的下面,負責與實(shí)際的硬件打交道,實(shí)現繁瑣的底層通信。USB功能驅動(dòng)程序由設備開(kāi)發(fā)者編寫(xiě),位于USB底層驅動(dòng)程序的上面,不與實(shí)際的硬件打交道,而是通過(guò)向USB底層驅動(dòng)程序發(fā)送包含URB(USB Request Block,USB 請求塊)的IRP(I/O Request Packet,I/O請求包),來(lái)實(shí)現對USB設備信息的發(fā)送和接收。采用這種分層驅動(dòng)程序的設計方法有兩個(gè)優(yōu)點(diǎn):(1)多個(gè)USB設備可以通過(guò)USB底層驅動(dòng)程序來(lái)協(xié)調它們的工作;(2)編寫(xiě)分層驅動(dòng)程序較之編寫(xiě)單一驅動(dòng)程序相對簡(jiǎn)單,且可以節省內存和資源,不易出錯。

若應用程序想對設備進(jìn)行I/O操作,它需調用Windows API函數 ,I/O管理器將此請求構造成一個(gè)合適的I/O請求包IRP并把它傳遞給USB功能驅動(dòng)程序。USB功能驅動(dòng)程序接收到這個(gè)IRP以后,根據IRP中包含的具體操作代碼,構造相應USB請求塊并把此URB放到一個(gè)新的IRP中,然后把此IRP傳遞USB底層驅動(dòng)程序,USB底層驅動(dòng)程序根據IRP中所含的URB執行響應的操作(如從USB設備讀取數據),并把操作結果返還給USB功能驅動(dòng)程序。USB功能驅動(dòng)程序接收到此IRP后,將操作結果通過(guò)IRP返還給I/O管理器,最后I/O管理器將此IRP操作結果返還給應用程序,至此應用程序對USB設備的一次I/O操作完成。

USB功能驅動(dòng)程序除負責處理應用程序的I/O請求外,還要處理PnP請求(如設備啟動(dòng)請求IRP_MN_START_DEVICE,設備刪除IRP_MN_REMOVE_DEVICE等)。通過(guò)對這些PnP請求的處理,USB功能驅動(dòng)程序可支持設備的熱插拔和即插即用功能。


INF文件的介紹

INF文件含有安裝一個(gè)WDM設備驅動(dòng)程序需要的所有必要的信息,包括要復制的文件列表、要創(chuàng )建的注冊表項、設備的ID和兼容ID等。INF文件是一個(gè)文本文件,它由節組成,每一節從節名稱(chēng)開(kāi)始,后面是節內容。

當發(fā)現新的設備時(shí)(系統啟動(dòng)時(shí),在安裝熱插拔設備時(shí),或者從控制面板安裝新設備時(shí)),就調用Windows的"添加新設備向導"執行。這個(gè)向導掃描所有可用的INF文件,試圖找到合適的驅動(dòng)程序。Windows首先選擇硬件ID匹配的設備的INF文件,否則它選擇其兼容ID與設備ID最佳匹配的INF文件,若仍未找到提示用戶(hù)選擇驅動(dòng)程序INF文件。然后根據INF文件的指令安裝驅動(dòng)程序,驅動(dòng)程序可執行文件被復制到正確的位置,通常是Windows System32\Drivers目錄,然后創(chuàng )建各種注冊表項,驅動(dòng)程序被裝入內存,并執行它的DirverEntry例程。對新的設備調用AddDevice例程,給設備分配I/O,DMA,中斷等資源(USB設備不需要分配資源),啟動(dòng)設備,然后正常的I/O操作就可以繼續進(jìn)行。使用后的INF文件復制到Windows INF子目錄。


USB功能驅動(dòng)程序開(kāi)發(fā)

系統中USB驅動(dòng)程序的開(kāi)發(fā)采用Compuware Numega公司的DriverStudio開(kāi)發(fā)工具。DriverStudio是一個(gè)大的開(kāi)發(fā)工具包,它包含VtoolsD、softICE和DriverWorks等開(kāi)發(fā)工具。Driver Wizard是DriverWorks創(chuàng )建WDM框架程序的工具,而DriverWorks又是DriverStudio的工具之一。在DriverWorks安裝之前,需要先安裝Windows 98 DDK或Windows 2000 DDK。系統中采用Driver Wizard創(chuàng )建一個(gè)WDM程序框架。

在Driver Wizard創(chuàng )建驅動(dòng)程序框架時(shí),開(kāi)發(fā)者需要提供設備的類(lèi)型,驅動(dòng)程序支持的功能,從注冊表中裝載的參數,接口方式,緩沖方式和電源管理方式等內容。通過(guò)Driver Wizard生成驅動(dòng)程序為開(kāi)發(fā)者提供基本的框架 ,針對具體的設備,開(kāi)發(fā)者只需修改較少的代碼就可以實(shí)現相應的功能。


PC機應用程序的實(shí)現

1、應用程序對USB驅動(dòng)程序的訪(fǎng)問(wèn)

在Windows中,Win32應用程序調用WDM的Win32函數有五個(gè):CreateFile(),ReadFile(),WriteFile(),DeviceIocontrol(),CloseHandle()。

(1)打開(kāi)一個(gè)WDM設備

應用程序打開(kāi)一個(gè)WDM設備驅動(dòng)程序,用的是CreateFile()函數,它的第一個(gè)參數不是一個(gè)WDM文件名,而是一個(gè)符號鏈接名。符號鏈接名的獲得需要調用SetupDiGetClassDevs,SetupDiEnumDeviceInterfaces,SetupDiGetDeviceInterfaceDetail三個(gè)函數。SetupDiGetClassDevs打開(kāi)指定GUID的設備的"設備信息集",SetupDiEnumDeviceInterfaces取出感興趣的設備實(shí)例的信息,SetupDiGetDeviceInterfaceDetail獲得實(shí)例的符號鏈接名。最后調用CreateFile()函數獲得設備的句柄,這樣它就能夠調用Win32函數,這將產(chǎn)生對應于此設備對象的IRP。

(2)關(guān)閉一個(gè)WDM設備

WDM允許多個(gè)應用程序打開(kāi)同一個(gè)設備,它為每個(gè)應用程序創(chuàng )建一個(gè)設備對象。當其中的一個(gè)應用程序調用CloseHandle()函數,驅動(dòng)程序首先收到"清除"IRP,驅動(dòng)程序應當在"清除"例程中清除和此設備對象有關(guān)的待處理的IRP。然后關(guān)閉IRP,關(guān)閉設備對象。

(3)ReadFile()、WriteFile()和DeviceIoControl函數的調用

這些調用都產(chǎn)生一個(gè)請求,產(chǎn)生IRP請求包傳遞給驅動(dòng)程序,實(shí)現對設備的讀、寫(xiě)和一些特定的操作。

2、PC機應用程序下載數據文件

PC機應用程序通過(guò)Win32函數實(shí)現將音頻文件下載到目標板,為了減少讀取下載文件的時(shí)間,在內存開(kāi)辟1M空間。先讀1M大小的文件到內存,下載完后再將剩余的文件讀入內存。在下載文件過(guò)程中,傳輸的數據可能有錯誤,為了解決這個(gè)問(wèn)題,采用了重傳機制,即若沒(méi)有收到EP7212確認''$''字符或收到其他的字符,將重傳該512個(gè)字節塊,直到成功為止。程序下載的流程如圖3所示。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
用DriverStudio開(kāi)發(fā)WDM型USB設備驅動(dòng)
設備驅動(dòng)程序通知應用程序的幾種方法||設備驅動(dòng)|
WDM驅動(dòng)開(kāi)發(fā)之路(1)
windows WDM驅動(dòng)程序設計
從一篇文章入門(mén)Windows驅動(dòng)程序(一)
【心經(jīng)】 淺談 windows 驅動(dòng)開(kāi)發(fā)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久