設(shè)備驅(qū)動(dòng)程序開發(fā)PPT課件_第1頁
設(shè)備驅(qū)動(dòng)程序開發(fā)PPT課件_第2頁
設(shè)備驅(qū)動(dòng)程序開發(fā)PPT課件_第3頁
設(shè)備驅(qū)動(dòng)程序開發(fā)PPT課件_第4頁
設(shè)備驅(qū)動(dòng)程序開發(fā)PPT課件_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、什么是設(shè)備驅(qū)動(dòng)程序什么是設(shè)備驅(qū)動(dòng)程序第1頁/共80頁“一般一般”驅(qū)動(dòng)程序開發(fā)的理解驅(qū)動(dòng)程序開發(fā)的理解 必須使用匯編語言對(duì)端口進(jìn)行讀寫 設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)的一部分,難于開發(fā)與調(diào)試。 設(shè)備驅(qū)動(dòng)程序控制硬件 中斷比較難于處理第2頁/共80頁必須使用匯編語言讀寫端口必須使用匯編語言讀寫端口 CEDDK.dll 提供 APIs與硬件進(jìn)行通信 HalGetBusData READ_PORT_UCHAR WRITE_REGISTER_ULONG 對(duì)于邏輯設(shè)備驅(qū)動(dòng)程序,采用Win32 APIs 從硬件獲取數(shù)據(jù)第3頁/共80頁設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)的一部分,難于開發(fā)與調(diào)試設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)的一部分,難于

2、開發(fā)與調(diào)試 對(duì)于UNIX或者是 Windows 9x,設(shè)備驅(qū)動(dòng)程序是與操作系統(tǒng)映像連接的,并運(yùn)行于系統(tǒng)內(nèi)核態(tài)。 對(duì)于windows CE,大多數(shù)的設(shè)備驅(qū)動(dòng)程序運(yùn)行于用戶態(tài),簡(jiǎn)單的來說就是一個(gè)DLL文件。第4頁/共80頁設(shè)備驅(qū)動(dòng)程序控制硬件設(shè)備驅(qū)動(dòng)程序控制硬件 大多數(shù)的設(shè)備驅(qū)動(dòng)程序用來控制硬件。 對(duì)于某些硬件,是沒有驅(qū)動(dòng)的。 CPU 內(nèi)存 對(duì)于虛擬設(shè)備驅(qū)動(dòng)程序,沒有物理設(shè)備。 文件系統(tǒng)驅(qū)動(dòng)程序 RAM disk第5頁/共80頁中斷有時(shí)難于處理中斷有時(shí)難于處理 Windows CE提供邏輯中斷 (SYSINTRs) 中斷由一個(gè)用戶態(tài)的線程進(jìn)行處理 (IST)第6頁/共80頁為什么應(yīng)當(dāng)寫驅(qū)動(dòng)程序?為

3、什么應(yīng)當(dāng)寫驅(qū)動(dòng)程序? 當(dāng)我們?cè)O(shè)計(jì)硬件時(shí),就需要提供這一硬件的驅(qū)動(dòng)軟件。 硬件OEM廠商不提供基于Windows CE的硬件驅(qū)動(dòng),但是提供硬件的規(guī)格說明。 對(duì)于一個(gè)現(xiàn)有硬件驅(qū)動(dòng)的功能進(jìn)行擴(kuò)展。第7頁/共80頁驅(qū)動(dòng)分類驅(qū)動(dòng)分類整體整體 Windows CE 整體上將設(shè)備驅(qū)動(dòng)分為三種: 內(nèi)置驅(qū)動(dòng) 總線 流接口第8頁/共80頁內(nèi)置驅(qū)動(dòng)內(nèi)置驅(qū)動(dòng) 硬件所必須的驅(qū)動(dòng)程序,這些驅(qū)動(dòng)程序通常由設(shè)計(jì)OEM廠商進(jìn)行設(shè)計(jì)。 如:鍵盤,觸摸屏,音頻設(shè)備。 可能不支持一般的驅(qū)動(dòng)接口,也有可能帶有擴(kuò)展的接口或者完全提供一個(gè)用戶自定義的接口。 內(nèi)置驅(qū)動(dòng)通常需要針對(duì)具體的操作系統(tǒng)進(jìn)行小幅改動(dòng)。第9頁/共80頁總線驅(qū)動(dòng)總線驅(qū)動(dòng)

4、管理系統(tǒng)總線如PCI總線等。PCMCIA與 CompactFlash也在其列。 負(fù)責(zé)處理總線上硬件的詢問,以及資源的分配。 同時(shí)也請(qǐng)求設(shè)備管理器為總線上的硬件安裝適當(dāng)驅(qū)動(dòng)程序。第10頁/共80頁驅(qū)動(dòng)分類驅(qū)動(dòng)分類 詳細(xì)詳細(xì) Audio Drivers Battery Drivers Block Drivers Bluetooth HCI Transport Driver Direct3D Device Driver Interface DirectDraw Display Drivers Display Drivers DVD-Video Renderer IEEE 1394 Drivers K

5、eyboard Drivers Notification LED Drivers Parallel Port Drivers PC Card Drivers Printer Drivers Serial Port Drivers Smart Card Drivers Stream Interface Drivers Touch Screen Drivers USB Drivers 第11頁/共80頁驅(qū)動(dòng)的加載過程驅(qū)動(dòng)的加載過程 大多數(shù)的設(shè)備驅(qū)動(dòng)由設(shè)備管理器(Device.exe)進(jìn)程在系統(tǒng)啟動(dòng)時(shí)進(jìn)行加載。 另一方面,其中一部分內(nèi)置驅(qū)動(dòng)程序由GWES.exe進(jìn)行加載。這些驅(qū)動(dòng)包括顯示器驅(qū)動(dòng) (D

6、DI.dll)、鍵盤驅(qū)動(dòng)、鼠標(biāo)驅(qū)動(dòng)、觸摸屏驅(qū)動(dòng)等。第12頁/共80頁驅(qū)動(dòng)的加載過程驅(qū)動(dòng)的加載過程1.當(dāng)Device.exe對(duì)設(shè)備驅(qū)動(dòng)程序進(jìn)行安裝時(shí)將在注冊(cè)表的HKEY_LOCAL_ MACHINEDrivers項(xiàng)下檢查一個(gè)字符串,其值為 RootKey,傳統(tǒng)地,其名字為 BuiltIn 。2.然后設(shè)備管理器在進(jìn)行初始化時(shí)使用注冊(cè)信息檢查器為它需要安裝的各個(gè)驅(qū)動(dòng)讀取值為RootKey的鍵。 第13頁/共80頁驅(qū)動(dòng)的加載過程驅(qū)動(dòng)的加載過程第14頁/共80頁驅(qū)動(dòng)的加載過程驅(qū)動(dòng)的加載過程3.安裝DLL,給每一個(gè)驅(qū)動(dòng)創(chuàng)建一個(gè)Active 鍵,然后調(diào)用ActivateDevice 或者 ActivateD

7、eviceEx將DLL注冊(cè)為系統(tǒng)中的一個(gè)設(shè)備驅(qū)動(dòng)程序。 4.ActivateDevice在 HKEY_LOCAL_MACHINEDriversActive下創(chuàng)建一個(gè)新的鍵值。第15頁/共80頁驅(qū)動(dòng)的加載過程驅(qū)動(dòng)的加載過程第16頁/共80頁驅(qū)動(dòng)加載驅(qū)動(dòng)加載API 設(shè)備驅(qū)動(dòng)程序也能通過應(yīng)用程序進(jìn)行手動(dòng)的安裝,這是ActivateDeviceEx的一個(gè)首選的功能。 安裝驅(qū)動(dòng)一個(gè)更老的方法是使用RegisterDevice 與 DeregisterDevice 第17頁/共80頁主要內(nèi)容主要內(nèi)容第18頁/共80頁什么是流接口什么是流接口 流接口驅(qū)動(dòng)包括所有提供流接口函數(shù)的驅(qū)動(dòng)程序,不管由這個(gè)驅(qū)動(dòng)控制的

8、設(shè)備是什么類型。 典型的流接口驅(qū)動(dòng)程序有: 文件系統(tǒng)驅(qū)動(dòng) (iostream, fstream) COM, LPT第19頁/共80頁使用流接口使用流接口hSer = CreateFile(TEXT(“COM1:”), GENERIC_READ, 0, NULL, OPEN_EXSITING, 0, NULL);rc = ReadFile(hSer, &ch, 1, &cBytes, NULL);TransmitCommChar(hSer, a);CloseHandle(hSer);第20頁/共80頁創(chuàng)建一個(gè)流驅(qū)動(dòng)程序創(chuàng)建一個(gè)流驅(qū)動(dòng)程序1.寫一個(gè)導(dǎo)出具體流接口的DLL2.編譯設(shè)備

9、驅(qū)動(dòng)程序3.對(duì)注冊(cè)表進(jìn)行配置第21頁/共80頁流接口函數(shù)流接口函數(shù)函數(shù)名函數(shù)名說明說明XXX_Close關(guān)閉以hOpenContext標(biāo)識(shí)的設(shè)備上下文。XXX_Deinit由設(shè)備管理器調(diào)用來刪除對(duì)某一設(shè)備的初始化信息。XXX_Init由設(shè)備管理器調(diào)用來對(duì)某一設(shè)備進(jìn)行初始化。XXX_IOControl向設(shè)備發(fā)送命令XXX_Open打開一個(gè)設(shè)備以進(jìn)行讀、寫或者既讀又寫。當(dāng)應(yīng)用調(diào)用CreateFile來打開某一個(gè)設(shè)備文件名時(shí)將間接地調(diào)用這一個(gè)函數(shù)。XXX_PowerDown停止向設(shè)備供電。只有在軟件控制下關(guān)機(jī)的設(shè)備上才可用。XXX_PowerUp恢復(fù)向設(shè)備供電XXX_Read從設(shè)備讀取數(shù)據(jù)XXX_S

10、eek在設(shè)備中移動(dòng)數(shù)據(jù)指針XXX_Write向設(shè)備寫數(shù)據(jù)第22頁/共80頁構(gòu)建設(shè)備驅(qū)動(dòng)程序構(gòu)建設(shè)備驅(qū)動(dòng)程序 構(gòu)建設(shè)備驅(qū)動(dòng)程序與構(gòu)建一個(gè)DLL一樣簡(jiǎn)單。 可以使用Platform Builder與EVC+。只需創(chuàng)建一個(gè)Windows CE DLL項(xiàng)目, 輸出適當(dāng) 的入口點(diǎn),然后編寫代碼。 常犯的一個(gè)錯(cuò)誤是沒有將入口點(diǎn)聲明為 extern C,因此 C+編譯器就不能處理輸出的函數(shù)名。第23頁/共80頁注冊(cè)表設(shè)置注冊(cè)表設(shè)置 在 Project.reg中:HKEY_LOCAL_MACHINEDriversBuiltInSample Dll = mydriver.Dll Prefix = DEM Ind

11、ex = dword:1 Order = dword:0 FriendlyName = Demo Driver Ioctl = dword:0第24頁/共80頁注冊(cè)表設(shè)置注冊(cè)表設(shè)置 Order 給所有的驅(qū)動(dòng)設(shè)置相對(duì)安裝順序。Order 為0的驅(qū)動(dòng)先安裝,依次安裝Order為1,2,的驅(qū)動(dòng)。Oder可以讓開發(fā)者保證有相到依賴關(guān)系的多個(gè)驅(qū)動(dòng)以適當(dāng)?shù)捻樞蜻M(jìn)行安裝。 Index 指定在文件系統(tǒng)中的驅(qū)動(dòng)名的數(shù)字部分。在默認(rèn)情況下,帶有前綴COM的驅(qū)動(dòng)在文件系統(tǒng)中分配名字為 COM1,下一個(gè)即為COM2。為了保證驅(qū)動(dòng)總是安裝成COM2,必須提供Index = 2。第25頁/共80頁演示演示 :使用使用em

12、ulator編寫一個(gè)流接口驅(qū)編寫一個(gè)流接口驅(qū)動(dòng)程序并使用它動(dòng)程序并使用它第26頁/共80頁驅(qū)動(dòng)是如何工作的驅(qū)動(dòng)是如何工作的1.When CE啟動(dòng)時(shí), Device.exe根據(jù)注冊(cè)表中的設(shè)置安裝所有的驅(qū)動(dòng)程序。2.當(dāng)安裝mydriver.dll時(shí), device.exe 調(diào)用 DEM1_Init。3.Application程序調(diào)用CreateFile(“DEM1”)第27頁/共80頁驅(qū)動(dòng)是如何工作的驅(qū)動(dòng)是如何工作的(2)4.Coredll.dll 處理API調(diào)用并切換到 device.exe5.Device.exe 調(diào)用mydriver.dll 的DEM1_Open。6.CreateFile返回

13、DEM1_Open的retval第28頁/共80頁設(shè)備功能棧設(shè)備功能棧第29頁/共80頁第30頁/共80頁驅(qū)動(dòng)架構(gòu)驅(qū)動(dòng)架構(gòu)第31頁/共80頁驅(qū)動(dòng)的類型驅(qū)動(dòng)的類型第32頁/共80頁內(nèi)置與流安裝機(jī)制內(nèi)置與流安裝機(jī)制 通常內(nèi)置驅(qū)動(dòng)程序根據(jù)注冊(cè)鍵值安裝在 GWES進(jìn)程空間 總線驅(qū)動(dòng)由Device.exe根據(jù)鍵值進(jìn)行安裝 可安裝的流驅(qū)動(dòng)或其它驅(qū)動(dòng)由Device.exe根據(jù)總線驅(qū)動(dòng)或注冊(cè)檢查器進(jìn)行安裝。第33頁/共80頁設(shè)備管理器設(shè)備管理器 用戶級(jí)進(jìn)程繼續(xù)運(yùn)行 與內(nèi)核、注冊(cè)表交互的單獨(dú)應(yīng)用程序,以及流接口驅(qū)動(dòng)DLL。 提供ActivateDevice 與 DeactivateDevice API。第34頁

14、/共80頁設(shè)備管理器設(shè)備管理器 包括IO資源管理器 安裝注冊(cè)表檢查器(RegEnum.dll) ,并由這一個(gè)注冊(cè)表檢查器根據(jù)注冊(cè)表進(jìn)行驅(qū)動(dòng)的安裝 提供電源通知回調(diào)函數(shù) 跟蹤所有已安裝的驅(qū)動(dòng)程序,給設(shè)備接口發(fā)出拉入或刪除的通知第35頁/共80頁設(shè)備管理器設(shè)備管理器 設(shè)備驅(qū)動(dòng)程序的安裝過程DEVICE.EXEI/O Resource Manager(part of Device.exe)REGENUM.DLLPCIBUS.DLL第36頁/共80頁注冊(cè)表枚舉器注冊(cè)表枚舉器 注冊(cè)枚舉器是RegEnum.dll Device.exe根據(jù)HKEY_LOCAL_MACHINEDriversRootKey安裝

15、注冊(cè)枚舉器 注冊(cè)枚舉器給每一個(gè)要安裝的驅(qū)動(dòng)程序掃描表項(xiàng) 注冊(cè)枚舉器是可重入的,并支持分級(jí)使用 當(dāng)注冊(cè)枚舉器卸載時(shí),同時(shí)也御載它安裝的所有信息 注冊(cè)枚舉器根據(jù)Order,檢查緊挨著傳給它的鍵的下一級(jí)鍵值。 注冊(cè)枚舉器對(duì)每一個(gè)找到的子鍵調(diào)用ActivateDeviceEx第37頁/共80頁ActivateDeviceEx由Device.exe提供總線驅(qū)動(dòng)程序當(dāng)安裝設(shè)備驅(qū)動(dòng)時(shí)調(diào)用ActivateDeviceExActivateDeviceEx也在RAM工作區(qū)鎖定流接口驅(qū)動(dòng)程序這可以防止代碼頁被丟棄注冊(cè)檢查器對(duì)找到的每一個(gè)內(nèi)置子鍵調(diào)用ActivateDeviceExActivateDeviceEx安裝

16、驅(qū)動(dòng)并更新注冊(cè)表第38頁/共80頁接口類接口類驅(qū)動(dòng)程序的接口有以下特征每一個(gè)Iclass有一個(gè)GUID,一個(gè)名字GUID描述類設(shè)備接口Name 描述接口的實(shí)例COM1:, DSK1: 等等提供一個(gè)驅(qū)動(dòng)接口在注冊(cè)表中的Iclass子鍵驅(qū)動(dòng)程序發(fā)布接口 AdvertiseInterface應(yīng)用程序訪問接口 RequestDeviceNotifications每個(gè)已有的接口的預(yù)定義GUIDA32942B7-920C-486b-B0E6-92A702A99B35 第39頁/共80頁I/O 資源管理資源管理(IORM)IORM是設(shè)備管理器必備的部分跟蹤可用I/O資源 (IRQ與I/O基地址)OEM為內(nèi)置

17、設(shè)備預(yù)分配的資源當(dāng)在總線上安裝一個(gè)客戶驅(qū)動(dòng)時(shí),總線驅(qū)動(dòng)請(qǐng)求資源ResourceReleaseResourceRequestResourceCreateList當(dāng)存在沖突時(shí)IORM調(diào)用 ResourceRequest失敗第40頁/共80頁注冊(cè)表幫助例程注冊(cè)表幫助例程從注冊(cè)表中讀取資源初始化信息OpenDeviceKeyDDKReg_GetIsrInfoDDKReg_GetWindowInfoDDKReg_GetPciInfo在COREDLL的API在 and 的函數(shù)原型在publiccommonoakdrivers中的例子wavedevpddes1371wavepdd.cpp - GetRegi

18、stryConfig第41頁/共80頁電源管理電源管理 電源管理器 靈活的系統(tǒng)級(jí)與外設(shè)級(jí)電源管理 使設(shè)備智能化地管理它們的電源 在設(shè)備與系統(tǒng)或應(yīng)用之間充當(dāng)協(xié)調(diào)者 使OEM修改調(diào)用PowerOffSystem()的相關(guān)代碼第42頁/共80頁電源管理電源管理系統(tǒng)級(jí)電源狀態(tài)設(shè)備(外設(shè))級(jí)電源狀態(tài)第43頁/共80頁電源管理器架構(gòu)電源管理器架構(gòu)第44頁/共80頁物理內(nèi)存物理內(nèi)存第45頁/共80頁虛擬地址空間虛擬地址空間第46頁/共80頁內(nèi)存管理函數(shù)內(nèi)存管理函數(shù) 設(shè)備驅(qū)動(dòng)程序是用戶態(tài)模塊 必須將物理內(nèi)存映射成虛擬內(nèi)存 VirtualAlloc, VirtualFree: 預(yù)留,釋放虛擬內(nèi)存 MEM_RES

19、ERVE VirtualCopy: 將一個(gè)物理內(nèi)存區(qū)域映射到一個(gè)虛擬內(nèi)存區(qū)域 PAGE_NOCACHE PAGE_PHYSICAL第47頁/共80頁驅(qū)動(dòng)的內(nèi)存訪問與映射驅(qū)動(dòng)的內(nèi)存訪問與映射 MapPtrToProcess 將一個(gè)地址空間的指針映射成另外一個(gè)指針 GetCurrentProcess / SetProcPermissions 重新找回進(jìn)程ID用于MapPtrToProcess函數(shù) MmMapIoSpace 將一個(gè)物理地址空間映射成一個(gè)不分頁的,由進(jìn)程決定的地址空間第48頁/共80頁CEDDKCE v2.1x 以及后來的版本支持獨(dú)立于平臺(tái)的I/O配置讓OEM以及驅(qū)動(dòng)開發(fā)人員使用它們C

20、EDDK.DLL總線管理 內(nèi)存管理I/O管理從NTDDK拿來的CEDDK API直到V2.12以后的版本才有文檔但在大多數(shù)V2.00版中都有第49頁/共80頁CEDDK 簡(jiǎn)介簡(jiǎn)介設(shè)備驅(qū)動(dòng)使用CEDDK正常開發(fā)的驅(qū)動(dòng)是跨平臺(tái)二進(jìn)制兼容的跨CPU的源代碼兼容第50頁/共80頁CEDDK 內(nèi)容內(nèi)容第51頁/共80頁中斷架構(gòu)中斷架構(gòu)中斷只是異常處理的一部分在內(nèi)核代碼中被獲取在恢復(fù)到用戶態(tài)之間進(jìn)行處理但是硬件是獨(dú)立于操作系統(tǒng)的CE使用二階段中斷服務(wù)模式少量的代碼進(jìn)行中斷的記錄調(diào)度中斷服務(wù)程序代碼進(jìn)行處理操作系統(tǒng)提供API來使能IRQ信號(hào),設(shè)置中斷的優(yōu)先級(jí),等等。與硬件有關(guān)的操作在OAL,以及設(shè)備驅(qū)動(dòng)代碼

21、中進(jìn)行。第52頁/共80頁關(guān)于關(guān)于ISR與與IST的一些的一些 解釋解釋 IST是老的用戶模式代碼 有完整的CE .NET API與CRT庫 CE .NET調(diào)度程序根據(jù)線程的優(yōu)先級(jí)控制IST的執(zhí)行 運(yùn)行態(tài)綁定到SYSINTR 從異常處理函數(shù)調(diào)用ISR 沒有操作系統(tǒng)服務(wù) 堆棧空間大小有限 可設(shè)置為可重入的 (在OAL進(jìn)行設(shè)置) MIPS, SHx匯編語言第53頁/共80頁ISRIRQ 優(yōu)先級(jí)的設(shè)定依賴于不同CPU的系統(tǒng)架構(gòu)在x86上由PIC硬件進(jìn)行設(shè)置在MIPS上用OAL的IntrPriority, IntrMask 進(jìn)行設(shè)置通過讓IST進(jìn)程推斷ISR服務(wù),OAL能夠增加實(shí)時(shí)性。在CE 3.0中

22、,所有的ISR代碼都是OAL的一部分沒有特殊的擴(kuò)展IRQ綁定到OEMInit的事件ID沒有支持PNP, 共享IRQ (PCI總線)CE .NET 通過IRS(IISR)鏈解決了這些限制。第54頁/共80頁CE .NET 可安裝可安裝ISRCE 3.0 ISR 架構(gòu)的首選擴(kuò)展DLL 代碼,在運(yùn)行時(shí)進(jìn)行綁定源代碼可以是獨(dú)立于CPU的一般用C編寫有一些限制不能調(diào)用CRT, Windows API, 或其它的DLL不可推斷的ISR,或 IST發(fā)布支持硬件共IRQ共享從同一個(gè)IRQ關(guān)聯(lián)的不同SYSINTR ID第55頁/共80頁CE .NET中斷處理中斷處理第56頁/共80頁中斷服務(wù)線程中斷服務(wù)線程是內(nèi)

23、置設(shè)備的驅(qū)動(dòng)程序的作戶態(tài)線程進(jìn)行實(shí)際的中斷處理調(diào)用CreateEvent 創(chuàng)建一個(gè)與邏輯中斷相關(guān)聯(lián)的事件對(duì)象IST在大多數(shù)時(shí)間里都是處于空閑狀態(tài),以內(nèi)核用信號(hào)通知事件對(duì)象時(shí)被喚醒IST通常運(yùn)行的優(yōu)先級(jí)高于普通優(yōu)先級(jí),其優(yōu)先級(jí)由 CeSetThreadPriority函數(shù)設(shè)定第57頁/共80頁中斷服務(wù)線程中斷服務(wù)線程InterruptInitialize調(diào)用InterruptInitialize將事件與ISR的中斷標(biāo)識(shí)符關(guān)聯(lián)起來WaitForSingleObject用來等待一個(gè)用信號(hào)通知的事件這一調(diào)用通常放在一個(gè)循環(huán)中,以使和中斷處理時(shí),IST可以回到這一個(gè)調(diào)用等待下一個(gè)要處理的中斷Interr

24、uptDone中斷數(shù)據(jù)處理完以后,IST必須調(diào)用 InterruptDone函數(shù)使內(nèi)核使能與這一個(gè)線程相關(guān)的中斷第58頁/共80頁典型的典型的IST啟動(dòng)啟動(dòng)第59頁/共80頁典型的典型的IST啟動(dòng)啟動(dòng)設(shè)置IST的優(yōu)先級(jí)與以前的事件斷開與ISR關(guān)聯(lián)第60頁/共80頁典型的典型的IST啟動(dòng)啟動(dòng)第61頁/共80頁典型的典型的IST結(jié)束結(jié)束設(shè)置一個(gè)會(huì)導(dǎo)致IST退出的標(biāo)志第62頁/共80頁總線驅(qū)動(dòng)概覽總線驅(qū)動(dòng)概覽 PCMCIA I82365 (ISA) TI-1250 (PCI) USB Host 多主控制器 OHCI 與 UHCI (PCI)第63頁/共80頁P(yáng)CMCIA HostPCMCIA總線驅(qū)動(dòng)

25、有三個(gè)主要的線程 狀態(tài)改變線程 (卡的插入與移除) 中斷線程(處理卡的功能性中斷請(qǐng)求) 回調(diào)線程 (通知事件相關(guān)的設(shè)備卡) 總線驅(qū)動(dòng)支持Card Serv消息的一個(gè)子集,從回調(diào)線程中用回調(diào)函數(shù)發(fā)送中斷以回調(diào)的形式發(fā)送到客戶端驅(qū)動(dòng)對(duì)新插入的卡進(jìn)行掃描以確定是否PnP元組,并與注冊(cè)表中的相關(guān)項(xiàng)進(jìn)行比較如果沒有發(fā)現(xiàn)相匹配的信息,則候選的驅(qū)動(dòng)程序就運(yùn)行與卡相關(guān)的“detect”例程對(duì)卡進(jìn)行識(shí)別 可能顯示出一個(gè)對(duì)話框詢問DLL的名字第64頁/共80頁USB Host 兼容USB 1.1版 完全支持OHCI與UHCI 支持所有的傳輸類型Isoch, bulk, interrupt, control USBD支持多個(gè)HC的復(fù)用 總線設(shè)備驅(qū)動(dòng)典型地采用LoadDriver進(jìn)行安裝,使用USBD操作與HC進(jìn)行通信 總線設(shè)備驅(qū)動(dòng)能可選地調(diào)用ActivateDeviceEx()以提供一個(gè)流接口給應(yīng)用程序 檢測(cè)并識(shí)別新裝設(shè)備 按照注冊(cè)表中的描述安裝驅(qū)動(dòng)可能顯示一個(gè)對(duì)話框詢問DLL的名字第65頁/共80頁第66頁/共80頁編程模型編程模型第67頁/共80頁第68頁/共8

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論