




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、什么什么(shn me)是設(shè)備驅(qū)動(dòng)程序是設(shè)備驅(qū)動(dòng)程序第1頁(yè)/共80頁(yè)第一頁(yè),共80頁(yè)?!耙话阋话?ybn)”驅(qū)動(dòng)程序開(kāi)發(fā)的理解驅(qū)動(dòng)程序開(kāi)發(fā)的理解 必須使用匯編語(yǔ)言對(duì)端口進(jìn)行讀寫 設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)的一部分,難于開(kāi)發(fā)與調(diào)試(dio sh)。 設(shè)備驅(qū)動(dòng)程序控制硬件 中斷比較難于處理第2頁(yè)/共80頁(yè)第二頁(yè),共80頁(yè)。必須使用必須使用(shyng)匯編語(yǔ)言讀寫端口匯編語(yǔ)言讀寫端口 CEDDK.dll 提供 APIs與硬件進(jìn)行通信 HalGetBusData READ_PORT_UCHAR WRITE_REGISTER_ULONG 對(duì)于(duy)邏輯設(shè)備驅(qū)動(dòng)程序,采用Win32 APIs 從硬件獲取
2、數(shù)據(jù)第3頁(yè)/共80頁(yè)第三頁(yè),共80頁(yè)。設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)的一部分,難于開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)的一部分,難于開(kāi)發(fā)(kif)與與調(diào)試調(diào)試 對(duì)于UNIX或者(huzh)是 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)單的來(lái)說(shuō)就是一個(gè)DLL文件。第4頁(yè)/共80頁(yè)第四頁(yè),共80頁(yè)。設(shè)備設(shè)備(shbi)驅(qū)動(dòng)程序控制硬件驅(qū)動(dòng)程序控制硬件 大多數(shù)的設(shè)備(shbi)驅(qū)動(dòng)程序用來(lái)控制硬件。 對(duì)于某些硬件,是沒(méi)有驅(qū)動(dòng)的。 CPU 內(nèi)存 對(duì)于虛擬設(shè)備(shbi)驅(qū)動(dòng)程序,沒(méi)有物理設(shè)備(shbi)。 文件系統(tǒng)驅(qū)動(dòng)程
3、序 RAM disk第5頁(yè)/共80頁(yè)第五頁(yè),共80頁(yè)。中斷有時(shí)中斷有時(shí)(yush)難于處理難于處理 Windows CE提供邏輯中斷 (SYSINTRs) 中斷由一個(gè)(y )用戶態(tài)的線程進(jìn)行處理 (IST)第6頁(yè)/共80頁(yè)第六頁(yè),共80頁(yè)。為什么應(yīng)當(dāng)為什么應(yīng)當(dāng)(yngdng)寫驅(qū)動(dòng)程序?寫驅(qū)動(dòng)程序? 當(dāng)我們(w men)設(shè)計(jì)硬件時(shí),就需要提供這一硬件的驅(qū)動(dòng)軟件。 硬件OEM廠商不提供基于Windows CE的硬件驅(qū)動(dòng),但是提供硬件的規(guī)格說(shuō)明。 對(duì)于一個(gè)現(xiàn)有硬件驅(qū)動(dòng)的功能進(jìn)行擴(kuò)展。第7頁(yè)/共80頁(yè)第七頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)分類分類整體整體 Windows CE 整體(zhngt)上將
4、設(shè)備驅(qū)動(dòng)分為三種: 內(nèi)置驅(qū)動(dòng) 總線 流接口第8頁(yè)/共80頁(yè)第八頁(yè),共80頁(yè)。內(nèi)置驅(qū)動(dòng)內(nèi)置驅(qū)動(dòng)(q dn) 硬件所必須的驅(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ì)具體( jt)的操作系統(tǒng)進(jìn)行小幅改動(dòng)。第9頁(yè)/共80頁(yè)第九頁(yè),共80頁(yè)。總線總線(zn xin)驅(qū)動(dòng)驅(qū)動(dòng) 管理系統(tǒng)總線(zn xin)如PCI總線(zn xin)等。PCMCIA與 CompactFlash也在其列。 負(fù)責(zé)處理總線(zn xin)上硬件的詢問(wèn),以及資源的分配。 同時(shí)也請(qǐng)求設(shè)備管
5、理器為總線(zn xin)上的硬件安裝適當(dāng)驅(qū)動(dòng)程序。第10頁(yè)/共80頁(yè)第十頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)分類分類 詳細(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 Keyboard Drivers Notification LED Drivers Paralle
6、l Port Drivers PC Card Drivers Printer Drivers Serial Port Drivers Smart Card Drivers Stream Interface Drivers Touch Screen Drivers USB Drivers 第11頁(yè)/共80頁(yè)第十一頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)的加載過(guò)程的加載過(guò)程 大多數(shù)的設(shè)備驅(qū)動(dòng)(q dn)由設(shè)備管理器(Device.exe)進(jìn)程在系統(tǒng)啟動(dòng)時(shí)進(jìn)行加載。 另一方面,其中一部分內(nèi)置驅(qū)動(dòng)(q dn)程序由GWES.exe進(jìn)行加載。這些驅(qū)動(dòng)(q dn)包括顯示器驅(qū)動(dòng)(q dn) (DDI.dll)、
7、鍵盤驅(qū)動(dòng)(q dn)、鼠標(biāo)驅(qū)動(dòng)(q dn)、觸摸屏驅(qū)動(dòng)(q dn)等。第12頁(yè)/共80頁(yè)第十二頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)的加載過(guò)程的加載過(guò)程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è)信息檢查器為它需要(xyo)安裝的各個(gè)驅(qū)動(dòng)讀取值為RootKey的鍵。 第13頁(yè)/共80頁(yè)第十三頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)的加載過(guò)程的加載過(guò)程第14頁(yè)/共80頁(yè)第十四頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)的加載過(guò)程
8、的加載過(guò)程3.安裝DLL,給每一個(gè)驅(qū)動(dòng)創(chuàng)建一個(gè)Active 鍵,然后調(diào)用ActivateDevice 或者 ActivateDeviceEx將DLL注冊(cè)(zhc)為系統(tǒng)中的一個(gè)設(shè)備驅(qū)動(dòng)程序。 4.ActivateDevice在 HKEY_LOCAL_MACHINEDriversActive下創(chuàng)建一個(gè)新的鍵值。第15頁(yè)/共80頁(yè)第十五頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)的加載過(guò)程的加載過(guò)程第16頁(yè)/共80頁(yè)第十六頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)加載加載API 設(shè)備驅(qū)動(dòng)程序也能通過(guò)(tnggu)應(yīng)用程序進(jìn)行手動(dòng)的安裝,這是ActivateDeviceEx的一個(gè)首選的功能。 安裝驅(qū)動(dòng)一個(gè)更老的方法是
9、使用RegisterDevice 與 DeregisterDevice 第17頁(yè)/共80頁(yè)第十七頁(yè),共80頁(yè)。主要主要(zhyo)內(nèi)容內(nèi)容第18頁(yè)/共80頁(yè)第十八頁(yè),共80頁(yè)。什么什么(shn me)是流接口是流接口 流接口驅(qū)動(dòng)包括所有提供流接口函數(shù)的驅(qū)動(dòng)程序,不管(bgun)由這個(gè)驅(qū)動(dòng)控制的設(shè)備是什么類型。 典型的流接口驅(qū)動(dòng)程序有: 文件系統(tǒng)驅(qū)動(dòng) (iostream, fstream) COM, LPT第19頁(yè)/共80頁(yè)第十九頁(yè),共80頁(yè)。使用使用(shyng)流接口流接口hSer = CreateFile(TEXT(“COM1:”), GENERIC_READ, 0, NULL, OPEN
10、_EXSITING, 0, NULL);rc = ReadFile(hSer, &ch, 1, &cBytes, NULL);TransmitCommChar(hSer, a);CloseHandle(hSer);第20頁(yè)/共80頁(yè)第二十頁(yè),共80頁(yè)。創(chuàng)建創(chuàng)建(chungjin)一個(gè)流驅(qū)動(dòng)程序一個(gè)流驅(qū)動(dòng)程序1.寫一個(gè)導(dǎo)出具體流接口的DLL2.編譯(biny)設(shè)備驅(qū)動(dòng)程序3.對(duì)注冊(cè)表進(jìn)行配置第21頁(yè)/共80頁(yè)第二十一頁(yè),共80頁(yè)。流接口函數(shù)流接口函數(shù)函數(shù)名函數(shù)名說(shuō)明說(shuō)明XXX_Close關(guān)閉以hOpenContext標(biāo)識(shí)的設(shè)備上下文。XXX_Deinit由設(shè)備管理器調(diào)用來(lái)刪除對(duì)某
11、一設(shè)備的初始化信息。XXX_Init由設(shè)備管理器調(diào)用來(lái)對(duì)某一設(shè)備進(jìn)行初始化。XXX_IOControl向設(shè)備發(fā)送命令XXX_Open打開(kāi)一個(gè)設(shè)備以進(jìn)行讀、寫或者既讀又寫。當(dāng)應(yīng)用調(diào)用CreateFile來(lái)打開(kāi)某一個(gè)設(shè)備文件名時(shí)將間接地調(diào)用這一個(gè)函數(shù)。XXX_PowerDown停止向設(shè)備供電。只有在軟件控制下關(guān)機(jī)的設(shè)備上才可用。XXX_PowerUp恢復(fù)向設(shè)備供電XXX_Read從設(shè)備讀取數(shù)據(jù)XXX_Seek在設(shè)備中移動(dòng)數(shù)據(jù)指針XXX_Write向設(shè)備寫數(shù)據(jù)第22頁(yè)/共80頁(yè)第二十二頁(yè),共80頁(yè)。構(gòu)建構(gòu)建(u jin)設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序 構(gòu)建(u jin)設(shè)備驅(qū)動(dòng)程序與構(gòu)建(u jin)一個(gè)
12、DLL一樣簡(jiǎn)單。 可以使用Platform Builder與EVC+。只需創(chuàng)建一個(gè)Windows CE DLL項(xiàng)目, 輸出適當(dāng) 的入口點(diǎn),然后編寫代碼。 常犯的一個(gè)錯(cuò)誤是沒(méi)有將入口點(diǎn)聲明為 extern C,因此 C+編譯器就不能處理輸出的函數(shù)名。第23頁(yè)/共80頁(yè)第二十三頁(yè),共80頁(yè)。注冊(cè)表設(shè)置注冊(cè)表設(shè)置(shzh) 在 Project.reg中:HKEY_LOCAL_MACHINEDriversBuiltInSample Dll = mydriver.Dll Prefix = DEM Index = dword:1 Order = dword:0 FriendlyName = Demo D
13、river Ioctl = dword:0第24頁(yè)/共80頁(yè)第二十四頁(yè),共80頁(yè)。注冊(cè)表設(shè)置注冊(cè)表設(shè)置(shzh) Order 給所有的驅(qū)動(dòng)設(shè)置相對(duì)安裝順序。Order 為0的驅(qū)動(dòng)先安裝,依次安裝Order為1,2,的驅(qū)動(dòng)。Oder可以讓開(kāi)發(fā)者保證有相到依賴關(guān)系的多個(gè)驅(qū)動(dòng)以適當(dāng)?shù)捻樞蜻M(jìn)行安裝。 Index 指定在文件系統(tǒng)中的驅(qū)動(dòng)名的數(shù)字部分。在默認(rèn)(mrn)情況下,帶有前綴COM的驅(qū)動(dòng)在文件系統(tǒng)中分配名字為 COM1,下一個(gè)即為COM2。為了保證驅(qū)動(dòng)總是安裝成COM2,必須提供Index = 2。第25頁(yè)/共80頁(yè)第二十五頁(yè),共80頁(yè)。演示演示 :使用使用emulator編寫一個(gè)編寫一個(gè)(y
14、)流接口驅(qū)動(dòng)程序并使用它流接口驅(qū)動(dòng)程序并使用它第26頁(yè)/共80頁(yè)第二十六頁(yè),共80頁(yè)。驅(qū)動(dòng)是如何驅(qū)動(dòng)是如何(rh)工作的工作的1.When CE啟動(dòng)時(shí), Device.exe根據(jù)注冊(cè)表中的設(shè)置安裝(nzhung)所有的驅(qū)動(dòng)程序。2.當(dāng)安裝(nzhung)mydriver.dll時(shí), device.exe 調(diào)用 DEM1_Init。3.Application程序調(diào)用CreateFile(“DEM1”)第27頁(yè)/共80頁(yè)第二十七頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)是如何工作的是如何工作的(2)4.Coredll.dll 處理(chl)API調(diào)用并切換到 device.exe5.Device.exe
15、調(diào)用mydriver.dll 的DEM1_Open。6.CreateFile返回DEM1_Open的retval第28頁(yè)/共80頁(yè)第二十八頁(yè),共80頁(yè)。設(shè)備設(shè)備(shbi)功能棧功能棧第29頁(yè)/共80頁(yè)第二十九頁(yè),共80頁(yè)。第30頁(yè)/共80頁(yè)第三十頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)架構(gòu)架構(gòu)第31頁(yè)/共80頁(yè)第三十一頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)的類型的類型第32頁(yè)/共80頁(yè)第三十二頁(yè),共80頁(yè)。內(nèi)置與流安裝內(nèi)置與流安裝(nzhung)機(jī)制機(jī)制 通常內(nèi)置驅(qū)動(dòng)(q dn)程序根據(jù)注冊(cè)鍵值安裝在 GWES進(jìn)程空間 總線驅(qū)動(dòng)(q dn)由Device.exe根據(jù)鍵值進(jìn)行安裝 可安裝的流驅(qū)動(dòng)(q d
16、n)或其它驅(qū)動(dòng)(q dn)由Device.exe根據(jù)總線驅(qū)動(dòng)(q dn)或注冊(cè)檢查器進(jìn)行安裝。第33頁(yè)/共80頁(yè)第三十三頁(yè),共80頁(yè)。設(shè)備設(shè)備(shbi)管理器管理器 用戶級(jí)進(jìn)程繼續(xù)運(yùn)行 與內(nèi)核、注冊(cè)表交互的單獨(dú)應(yīng)用程序,以及流接口( ji ku)驅(qū)動(dòng)DLL。 提供ActivateDevice 與 DeactivateDevice API。第34頁(yè)/共80頁(yè)第三十四頁(yè),共80頁(yè)。設(shè)備設(shè)備(shbi)管理器管理器 包括IO資源管理器 安裝注冊(cè)表檢查器(RegEnum.dll) ,并由這一個(gè)注冊(cè)表檢查器根據(jù)(gnj)注冊(cè)表進(jìn)行驅(qū)動(dòng)的安裝 提供電源通知回調(diào)函數(shù) 跟蹤所有已安裝的驅(qū)動(dòng)程序,給設(shè)備接口發(fā)
17、出拉入或刪除的通知第35頁(yè)/共80頁(yè)第三十五頁(yè),共80頁(yè)。設(shè)備設(shè)備(shbi)管理器管理器 設(shè)備驅(qū)動(dòng)程序的安裝(nzhung)過(guò)程DEVICE.EXEI/O Resource Manager(part of Device.exe)REGENUM.DLLPCIBUS.DLL第36頁(yè)/共80頁(yè)第三十六頁(yè),共80頁(yè)。注冊(cè)表枚舉注冊(cè)表枚舉(mi j)器器注冊(cè)枚舉器是RegEnum.dllDevice.exe根據(jù)HKEY_LOCAL_MACHINEDriversRootKey安裝注冊(cè)枚舉器注冊(cè)枚舉器給每一個(gè)要安裝的驅(qū)動(dòng)程序掃描表項(xiàng)注冊(cè)枚舉器是可重入的,并支持分級(jí)(fn j)使用當(dāng)注冊(cè)枚舉器卸載時(shí),同時(shí)也
18、御載它安裝的所有信息注冊(cè)枚舉器根據(jù)Order,檢查緊挨著傳給它的鍵的下一級(jí)鍵值。注冊(cè)枚舉器對(duì)每一個(gè)找到的子鍵調(diào)用ActivateDeviceEx第37頁(yè)/共80頁(yè)第三十七頁(yè),共80頁(yè)。ActivateDeviceEx由Device.exe提供總線驅(qū)動(dòng)程序當(dāng)安裝設(shè)備驅(qū)動(dòng)時(shí)調(diào)用ActivateDeviceExActivateDeviceEx也在RAM工作區(qū)鎖定流接口(ji ku)驅(qū)動(dòng)程序這可以防止代碼頁(yè)被丟棄注冊(cè)檢查器對(duì)找到的每一個(gè)內(nèi)置子鍵調(diào)用ActivateDeviceExActivateDeviceEx安裝驅(qū)動(dòng)并更新注冊(cè)表第38頁(yè)/共80頁(yè)第三十八頁(yè),共80頁(yè)。接口類接口類驅(qū)動(dòng)程序的接口有以下
19、特征每一個(gè)Iclass有一個(gè)GUID,一個(gè)名字GUID描述類設(shè)備接口Name 描述接口的實(shí)例COM1:, DSK1: 等等提供一個(gè)驅(qū)動(dòng)接口在注冊(cè)表中的Iclass子鍵驅(qū)動(dòng)程序發(fā)布接口 AdvertiseInterface應(yīng)用程序訪問(wèn)(fngwn)接口 RequestDeviceNotifications每個(gè)已有的接口的預(yù)定義GUIDA32942B7-920C-486b-B0E6-92A702A99B35 第39頁(yè)/共80頁(yè)第三十九頁(yè),共80頁(yè)。I/O 資源管理資源管理(IORM)IORM是設(shè)備管理器必備的部分跟蹤可用I/O資源 (IRQ與I/O基地址)OEM為內(nèi)置設(shè)備預(yù)分配的資源當(dāng)在總線上安裝
20、一個(gè)客戶驅(qū)動(dòng)時(shí),總線驅(qū)動(dòng)請(qǐng)求資源ResourceReleaseResourceRequestResourceCreateList當(dāng)存在沖突時(shí)IORM調(diào)用(dioyng) ResourceRequest失敗第40頁(yè)/共80頁(yè)第四十頁(yè),共80頁(yè)。注冊(cè)表幫助注冊(cè)表幫助(bngzh)例程例程從注冊(cè)表中讀取資源(zyun)初始化信息OpenDeviceKeyDDKReg_GetIsrInfoDDKReg_GetWindowInfoDDKReg_GetPciInfo在COREDLL的API在 and 的函數(shù)原型在publiccommonoakdrivers中的例子wavedevpddes1371wavep
21、dd.cpp - GetRegistryConfig第41頁(yè)/共80頁(yè)第四十一頁(yè),共80頁(yè)。電源電源(dinyun)管理管理 電源管理(gunl)器 靈活的系統(tǒng)級(jí)與外設(shè)級(jí)電源管理(gunl) 使設(shè)備智能化地管理(gunl)它們的電源 在設(shè)備與系統(tǒng)或應(yīng)用之間充當(dāng)協(xié)調(diào)者 使OEM修改調(diào)用PowerOffSystem()的相關(guān)代碼第42頁(yè)/共80頁(yè)第四十二頁(yè),共80頁(yè)。電源電源(dinyun)管理管理系統(tǒng)(xtng)級(jí)電源狀態(tài)設(shè)備(外設(shè))級(jí)電源狀態(tài)第43頁(yè)/共80頁(yè)第四十三頁(yè),共80頁(yè)。電源電源(dinyun)管理器架構(gòu)管理器架構(gòu)第44頁(yè)/共80頁(yè)第四十四頁(yè),共80頁(yè)。物理物理(wl)內(nèi)存內(nèi)存第45
22、頁(yè)/共80頁(yè)第四十五頁(yè),共80頁(yè)。虛擬地址空間虛擬地址空間(kngjin)第46頁(yè)/共80頁(yè)第四十六頁(yè),共80頁(yè)。內(nèi)存管理內(nèi)存管理(gunl)函數(shù)函數(shù) 設(shè)備驅(qū)動(dòng)程序是用戶(yngh)態(tài)模塊 必須將物理內(nèi)存映射成虛擬內(nèi)存 VirtualAlloc, VirtualFree: 預(yù)留,釋放虛擬內(nèi)存 MEM_RESERVE VirtualCopy: 將一個(gè)物理內(nèi)存區(qū)域映射到一個(gè)虛擬內(nèi)存區(qū)域 PAGE_NOCACHE PAGE_PHYSICAL第47頁(yè)/共80頁(yè)第四十七頁(yè),共80頁(yè)。驅(qū)動(dòng)驅(qū)動(dòng)(q dn)的內(nèi)存訪問(wèn)與映射的內(nèi)存訪問(wèn)與映射 MapPtrToProcess 將一個(gè)地址空間(kngjin)的指針
23、映射成另外一個(gè)指針 GetCurrentProcess / SetProcPermissions 重新找回進(jìn)程ID用于MapPtrToProcess函數(shù) MmMapIoSpace 將一個(gè)物理地址空間(kngjin)映射成一個(gè)不分頁(yè)的,由進(jìn)程決定的地址空間(kngjin)第48頁(yè)/共80頁(yè)第四十八頁(yè),共80頁(yè)。CEDDKCE v2.1x 以及(yj)后來(lái)的版本支持獨(dú)立于平臺(tái)的I/O配置讓OEM以及(yj)驅(qū)動(dòng)開(kāi)發(fā)人員使用它們CEDDK.DLL總線管理 內(nèi)存管理I/O管理從NTDDK拿來(lái)的CEDDK API直到V2.12以后的版本才有文檔但在大多數(shù)V2.00版中都有第49頁(yè)/共80頁(yè)第四十九頁(yè),共
24、80頁(yè)。CEDDK 簡(jiǎn)介簡(jiǎn)介(jin ji)設(shè)備驅(qū)動(dòng)使用(shyng)CEDDK正常開(kāi)發(fā)的驅(qū)動(dòng)是跨平臺(tái)二進(jìn)制兼容的跨CPU的源代碼兼容第50頁(yè)/共80頁(yè)第五十頁(yè),共80頁(yè)。CEDDK 內(nèi)容內(nèi)容(nirng)第51頁(yè)/共80頁(yè)第五十一頁(yè),共80頁(yè)。中斷中斷(zhngdun)架構(gòu)架構(gòu)中斷只是異常處理的一部分在內(nèi)核代碼中被獲取在恢復(fù)到用戶態(tài)之間進(jìn)行處理但是硬件是獨(dú)立于操作系統(tǒng)的CE使用二階段中斷服務(wù)(fw)模式少量的代碼進(jìn)行中斷的記錄調(diào)度中斷服務(wù)(fw)程序代碼進(jìn)行處理操作系統(tǒng)提供API來(lái)使能IRQ信號(hào),設(shè)置中斷的優(yōu)先級(jí),等等。與硬件有關(guān)的操作在OAL,以及設(shè)備驅(qū)動(dòng)代碼中進(jìn)行。第52頁(yè)/共80頁(yè)第五
25、十二頁(yè),共80頁(yè)。關(guān)于關(guān)于ISR與與IST的一些的一些(yxi) 解釋解釋 IST是老的用戶模式代碼 有完整的CE .NET API與CRT庫(kù) CE .NET調(diào)度程序根據(jù)線程的優(yōu)先級(jí)控制IST的執(zhí)行 運(yùn)行態(tài)綁定到SYSINTR 從異常處理函數(shù)調(diào)用ISR 沒(méi)有操作系統(tǒng)服務(wù) 堆棧(duzhn)空間大小有限 可設(shè)置為可重入的 (在OAL進(jìn)行設(shè)置) MIPS, SHx匯編語(yǔ)言第53頁(yè)/共80頁(yè)第五十三頁(yè),共80頁(yè)。ISRIRQ 優(yōu)先級(jí)的設(shè)定依賴于不同CPU的系統(tǒng)架構(gòu)在x86上由PIC硬件進(jìn)行設(shè)置在MIPS上用OAL的IntrPriority, IntrMask 進(jìn)行設(shè)置通過(guò)讓IST進(jìn)程推斷ISR服務(wù),
26、OAL能夠增加實(shí)時(shí)性。在CE 3.0中,所有的ISR代碼都是OAL的一部分沒(méi)有特殊的擴(kuò)展(kuzhn)IRQ綁定到OEMInit的事件ID沒(méi)有支持PNP, 共享IRQ (PCI總線)CE .NET 通過(guò)IRS(IISR)鏈解決了這些限制。第54頁(yè)/共80頁(yè)第五十四頁(yè),共80頁(yè)。CE .NET 可安裝可安裝(nzhung)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ā)布支持硬件(yn jin)共IRQ共享從同一個(gè)IRQ關(guān)聯(lián)的不同SYSI
27、NTR ID第55頁(yè)/共80頁(yè)第五十五頁(yè),共80頁(yè)。CE .NET中斷中斷(zhngdun)處理處理第56頁(yè)/共80頁(yè)第五十六頁(yè),共80頁(yè)。中斷中斷(zhngdun)服務(wù)線程服務(wù)線程是內(nèi)置設(shè)備的驅(qū)動(dòng)程序的作戶態(tài)線程進(jìn)行( jnxng)實(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頁(yè)/共80頁(yè)第五十七頁(yè),共80頁(yè)。中斷中斷(zhngdun)服務(wù)線程服務(wù)線程InterruptInitialize調(diào)用
28、InterruptInitialize將事件與ISR的中斷標(biāo)識(shí)符關(guān)聯(lián)(gunlin)起來(lái)WaitForSingleObject用來(lái)等待一個(gè)用信號(hào)通知的事件這一調(diào)用通常放在一個(gè)循環(huán)中,以使和中斷處理時(shí),IST可以回到這一個(gè)調(diào)用等待下一個(gè)要處理的中斷InterruptDone中斷數(shù)據(jù)處理完以后,IST必須調(diào)用 InterruptDone函數(shù)使內(nèi)核使能與這一個(gè)線程相關(guān)的中斷第58頁(yè)/共80頁(yè)第五十八頁(yè),共80頁(yè)。典型典型(dinxng)的的IST啟動(dòng)啟動(dòng)第59頁(yè)/共80頁(yè)第五十九頁(yè),共80頁(yè)。典型典型(dinxng)的的IST啟動(dòng)啟動(dòng)設(shè)置IST的優(yōu)先級(jí)與以前的事件斷開(kāi)(dun ki)與ISR關(guān)聯(lián)第6
29、0頁(yè)/共80頁(yè)第六十頁(yè),共80頁(yè)。典型典型(dinxng)的的IST啟動(dòng)啟動(dòng)第61頁(yè)/共80頁(yè)第六十一頁(yè),共80頁(yè)。典型典型(dinxng)的的IST結(jié)束結(jié)束設(shè)置一個(gè)會(huì)導(dǎo)致IST退出(tuch)的標(biāo)志第62頁(yè)/共80頁(yè)第六十二頁(yè),共80頁(yè)。總線總線(zn xin)驅(qū)動(dòng)概覽驅(qū)動(dòng)概覽 PCMCIA I82365 (ISA) TI-1250 (PCI) USB Host 多主控制器 OHCI 與 UHCI (PCI)第63頁(yè)/共80頁(yè)第六十三頁(yè),共80頁(yè)。PCMCIA HostPCMCIA總線驅(qū)動(dòng)有三個(gè)主要的線程 狀態(tài)改變線程 (卡的插入與移除) 中斷線程(處理卡的功能性中斷請(qǐng)求) 回調(diào)線程 (通知
30、事件相關(guān)的設(shè)備卡) 總線驅(qū)動(dòng)支持Card Serv消息的一個(gè)子集,從回調(diào)線程中用回調(diào)函數(shù)發(fā)送中斷以回調(diào)的形式發(fā)送到客戶端驅(qū)動(dòng)對(duì)新插入的卡進(jìn)行掃描以確定是否(sh fu)PnP元組,并與注冊(cè)表中的相關(guān)項(xiàng)進(jìn)行比較如果沒(méi)有發(fā)現(xiàn)相匹配的信息,則候選的驅(qū)動(dòng)程序就運(yùn)行與卡相關(guān)的“detect”例程對(duì)卡進(jìn)行識(shí)別可能顯示出一個(gè)對(duì)話框詢問(wèn)DLL的名字第64頁(yè)/共80頁(yè)第六十四頁(yè),共80頁(yè)。USB Host兼容USB 1.1版完全支持OHCI與UHCI支持所有的傳輸類型Isoch, bulk, interrupt, controlUSBD支持多個(gè)HC的復(fù)用總線設(shè)備驅(qū)動(dòng)典型地采用LoadDriver進(jìn)行安裝,使用(shyng)USBD操作與HC進(jìn)行通信總線設(shè)備驅(qū)動(dòng)能可選地調(diào)用ActivateDeviceEx()以提供一個(gè)流接口給應(yīng)用程序檢測(cè)并識(shí)別新裝設(shè)備按照注冊(cè)表中的描述安裝驅(qū)動(dòng)可能顯示一個(gè)對(duì)話框詢問(wèn)DLL的名字第65頁(yè)/共80頁(yè)第六十五頁(yè),共80頁(yè)。第66頁(yè)/共80頁(yè)第六十六頁(yè),共80頁(yè)。編程模型編程模型第67頁(yè)/共80頁(yè)第六十七頁(yè),共80頁(yè)。第68頁(yè)/共80頁(yè)第六十八頁(yè),共80頁(yè)。USB 驅(qū)動(dòng)驅(qū)動(dòng)(q dn)傳輸類型傳輸類型 控制傳輸 USB 打印機(jī), USB數(shù)碼相機(jī) 同步傳輸 USB 網(wǎng)絡(luò)電話(wn
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高性能特種合金材料項(xiàng)目合作計(jì)劃書(shū)
- 同城工地出售合同范本
- 合作建材協(xié)議合同范例
- 共同投資協(xié)議合同范本
- 賣地買房合同范本
- 卷宗管理服務(wù)合同范例
- 合同范本庫(kù)編制說(shuō)明
- 資質(zhì)借用合同范本
- 農(nóng)田煙桿出售合同范本
- 幼兒園塑膠地板購(gòu)銷施工合同范本
- 英語(yǔ)-廣東省大灣區(qū)2025屆高三第一次模擬試卷和答案
- 丹佛斯變頻器培訓(xùn)經(jīng)典課件
- 2024年06月日照銀行社會(huì)招聘筆試歷年參考題庫(kù)附帶答案詳解
- 烤房租賃合同范例
- 建筑地暖系統(tǒng)工程安裝考核試卷
- 專題四 指數(shù)函數(shù)與對(duì)數(shù)函數(shù)【中職專用】2025春季對(duì)口高考數(shù)學(xué)專題復(fù)習(xí)(河南適用)(解析版)
- 江蘇卷2024年高考語(yǔ)文第一次模擬考試一(原卷版+解析版)
- 2024解析:第十六章電壓和電阻-講核心(解析版)
- 單層鋼結(jié)構(gòu)工業(yè)廠房施施工組織設(shè)計(jì)
- 華為經(jīng)營(yíng)管理-華為激勵(lì)機(jī)制(6版)
- 投資公司組織架構(gòu)和運(yùn)作流程
評(píng)論
0/150
提交評(píng)論