CE設(shè)備驅(qū)動(dòng)程序_第1頁(yè)
CE設(shè)備驅(qū)動(dòng)程序_第2頁(yè)
CE設(shè)備驅(qū)動(dòng)程序_第3頁(yè)
CE設(shè)備驅(qū)動(dòng)程序_第4頁(yè)
CE設(shè)備驅(qū)動(dòng)程序_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Windows CE設(shè)備驅(qū)動(dòng)程序南京大學(xué)軟件學(xué)院2005年6月內(nèi)容 Windows CE設(shè)備管理 設(shè)備驅(qū)動(dòng)模型 驅(qū)動(dòng)程序的中斷處理 流接口驅(qū)動(dòng)程序 編寫(xiě)流接口驅(qū)動(dòng)程序設(shè)備管理體系結(jié)構(gòu) 設(shè)備管理的分層模式用戶軟件設(shè)備無(wú)關(guān)的系統(tǒng)軟件硬件抽象層4個(gè)部分:I/O管理;PnP管理;電源管理;管理和支撐的例程庫(kù)設(shè)備管理體系結(jié)構(gòu)(續(xù)) I/O管理 隔離應(yīng)用層程序和內(nèi)核,負(fù)責(zé)注冊(cè)和管理流接口驅(qū)動(dòng)程序; 定義Windows CE設(shè)備驅(qū)動(dòng)機(jī)制和一個(gè)設(shè)備驅(qū)動(dòng)程序的有序工作框架; 實(shí)現(xiàn)I/O資源分配和查詢,提供標(biāo)準(zhǔn)API函數(shù)加載和卸載驅(qū)動(dòng)程序 PnP管理 自動(dòng)識(shí)別硬件設(shè)備并自動(dòng)加載相應(yīng)驅(qū)動(dòng)程序; 需要硬件支持; 電源

2、管理 管理系統(tǒng)能源分配策略,決定系統(tǒng)能耗狀態(tài)變化; 硬件支持 例程庫(kù)設(shè)備管理器 Windows CE設(shè)備管理器 設(shè)備管理的核心機(jī)構(gòu),負(fù)責(zé)跟蹤、維護(hù)系統(tǒng)設(shè)備信息并對(duì)設(shè)備資源進(jìn)行調(diào)配 Device.exe 用戶級(jí)程序(不是內(nèi)核的一部分!) 設(shè)備管理器的任務(wù) 系統(tǒng)啟動(dòng)或收到用戶添加外圍設(shè)備的信息時(shí)初始化驅(qū)動(dòng)程序的加載 向內(nèi)核注冊(cè)特定的文件名 通過(guò)從外圍設(shè)備獲得即插即用標(biāo)識(shí)符,或激活一個(gè)檢查子程序來(lái)發(fā)現(xiàn)可以處理該設(shè)備的驅(qū)動(dòng)程序,為外圍設(shè)備找到合適的驅(qū)動(dòng)程序 通過(guò)讀寫(xiě)注冊(cè)表加載、跟蹤驅(qū)動(dòng)程序 不需要設(shè)備時(shí),卸載驅(qū)動(dòng)程序流接口驅(qū)動(dòng)程序的加載 加載的三種方法 系統(tǒng)啟動(dòng)時(shí)加載 注冊(cè)表項(xiàng):HKEY_LOCAL_

3、MACHINEdriversRootKey HKEY_LOCAL_MACHINEdriversBuiltIn 設(shè)備管理器自動(dòng)檢測(cè)外圍設(shè)備時(shí)加載 例:PC卡 使用ActivateDeviceEx加載 設(shè)備管理器不能自動(dòng)檢測(cè)或加載時(shí)使用 例:串口設(shè)備ActivateDeviceEx函數(shù) 接口HANDLE ActivateDeviceEx( LPCWSTR lpzaDevKey, /字符串指針,指向設(shè)備驅(qū)動(dòng)程序的注冊(cè)鍵 LPCVOID lpRegEnts, /REGINI結(jié)構(gòu)數(shù)組頭指針 DWORD cRegEnts, /REGINI結(jié)構(gòu)數(shù)組成員個(gè)數(shù) LPVOID lpvParam /通常為NULL)

4、; 返回:當(dāng)前驅(qū)動(dòng)程序注冊(cè)的句柄 通過(guò)內(nèi)部函數(shù)StartOneDriver實(shí)現(xiàn)ActivateDeviceEx的使用 一個(gè)驅(qū)動(dòng)程序注冊(cè)表部分的內(nèi)容HKEY_LOCAL_MACHINEDriversBuiltInPM“Prefix”=“PWR”“Dll”=“pm.dll”“Order”=dword:0“Ioctl”=dword:4“Index”=dword:0“IClass”=multi_sz:”A32942B7-920C-486b-B0E6-92A702A99B35” 加載方法ActivateDeviceEx(“ HKEY_LOCAL_MACHINEDriversBuiltInPM”, );內(nèi)

5、容 Windows CE設(shè)備管理 設(shè)備驅(qū)動(dòng)模型 驅(qū)動(dòng)程序的中斷處理 流接口驅(qū)動(dòng)程序 編寫(xiě)流接口驅(qū)動(dòng)程序驅(qū)動(dòng)程序模型 驅(qū)動(dòng)程序模型 決定了驅(qū)動(dòng)程序的軟件接口 不同的驅(qū)動(dòng)程序模型通過(guò)它們支持的軟件接口來(lái)區(qū)別,而不是適用的設(shè)備 兩種驅(qū)動(dòng)程序模型 本機(jī)設(shè)備驅(qū)動(dòng)程序 流接口驅(qū)動(dòng)程序 其它分法 整體結(jié)構(gòu)(monolithic)/分層結(jié)構(gòu)(layered)本機(jī)設(shè)備驅(qū)動(dòng)程序 本機(jī)設(shè)備驅(qū)動(dòng)程序 適用于集成到WinCE平臺(tái)的設(shè)備,如鍵盤(pán)、顯示器、PC卡插槽等; GWES的一部分 啟動(dòng)時(shí)加載 驅(qū)動(dòng)程序樣本 PlatformBuilder 整體和分層 MDD(Model Device Driver), PDD(Pla

6、tform Dependent Driver)流設(shè)備驅(qū)動(dòng)程序 流設(shè)備驅(qū)動(dòng)程序 一般類(lèi)型的設(shè)備驅(qū)動(dòng)程序,支持幾乎所有可連接在WinCE平臺(tái)上的外部設(shè)備(更常用?。?表現(xiàn)為用戶級(jí)DLL 實(shí)現(xiàn)一組流接口函數(shù),這些函數(shù)使得應(yīng)用程序可以通過(guò)文件系統(tǒng)訪問(wèn)驅(qū)動(dòng)程序 不支持外部設(shè)備、僅提供服務(wù)的流接口驅(qū)動(dòng)程序驅(qū)動(dòng)程序系統(tǒng)結(jié)構(gòu)驅(qū)動(dòng)程序系統(tǒng)結(jié)構(gòu)(續(xù)) 術(shù)語(yǔ) DDI: Device Driver Interface DDSI: Device Driver Service Interface MDD的任務(wù): 鏈接PDD層并定義它希望調(diào)用的函數(shù)(DDSI) 把不同的函數(shù)集提供給操作系統(tǒng)(DDI). 負(fù)責(zé)與GWES模塊和

7、內(nèi)核通信,包含一些復(fù)雜的操作,例如中斷處理等。內(nèi)容 Windows CE設(shè)備管理 設(shè)備驅(qū)動(dòng)模型 驅(qū)動(dòng)程序的中斷處理 流接口驅(qū)動(dòng)程序 編寫(xiě)流接口驅(qū)動(dòng)程序ISR和IST 中斷處理分兩部分 中斷服務(wù)例程(Interrupt Service Routine, ISR) 中斷服務(wù)線程(Interrupt Service Thread, IST) ISR 確定把哪個(gè)中斷標(biāo)識(shí)返回給核心匯中斷處理器 越短、越快越好 IST 執(zhí)行大多數(shù)中斷處理任務(wù) IST使用InterruptInitialize函數(shù)注冊(cè)自己,然后使用WaitForSingleObject等待中斷請(qǐng)求事件 在驅(qū)動(dòng)程序的XXX_Init里完成IS

8、T中斷處理 要實(shí)現(xiàn)IST必須實(shí)現(xiàn)兩個(gè)過(guò)程: IST的中斷必須和一個(gè)事件相關(guān)聯(lián) IST必須通過(guò)WaitForSingleObject等待該事件的喚醒 具體實(shí)現(xiàn)過(guò)程(XXX_Init函數(shù)中定義): 創(chuàng)建一個(gè)事件(CreateEvent) 得到系統(tǒng)的中斷號(hào)(KernelIoControl) 創(chuàng)建一個(gè)掛起的IST(CreateThread) 設(shè)置IST優(yōu)先級(jí)(CeSetThreadPriority) 注冊(cè)中斷(InterruptInitialize) 恢復(fù)IST,IST開(kāi)始服務(wù)(ResumeThread) 通過(guò)WaitForSingleObject等待事件KernelIoControl函數(shù) 接口BOO

9、L KernelControl( DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize, LPVOID lpOutBuf, LPWORD nOutBufSize, LPDWORD lpBytesReturned); 功能: 完成kernel同上層應(yīng)用程序的通信InitializeInterrupt函數(shù) 接口BOOL InterruptInitialize( DWORD idInt, HANDLE hEvent, LPVOID pvData, DWORD cbData); 功能: 將一個(gè)中斷和一個(gè)事件相關(guān)聯(lián)內(nèi)容 Windows CE設(shè)備管

10、理 設(shè)備驅(qū)動(dòng)模型 驅(qū)動(dòng)程序的中斷處理 流接口驅(qū)動(dòng)程序 編寫(xiě)流接口驅(qū)動(dòng)程序流接口驅(qū)動(dòng)程序的工作結(jié)構(gòu) 設(shè)備作為文件系統(tǒng)的一個(gè)特殊文件相關(guān)的注冊(cè)表項(xiàng) HKEY_LOCAL_MACHINEDrivers鍵 設(shè)備管理程序使用該鍵中的注冊(cè)鍵管理驅(qū)動(dòng)程序 子鍵 Active 包含由設(shè)備管理程序加載的跟蹤當(dāng)前活動(dòng)的驅(qū)動(dòng)程序 BuiltIn 包含由WinCE平臺(tái)制造商提供的驅(qū)動(dòng)程序,系統(tǒng)啟動(dòng)時(shí)加載 PCMCIA 包含與PC卡及其流接口驅(qū)動(dòng)程序有關(guān)的子鍵 Resource 記錄系統(tǒng)中斷和I/O使用情況設(shè)備文件名 格式 前綴 + 索引 + 冒號(hào) 例:”COM1:”, “FSD1:” 前綴 三個(gè)大寫(xiě)字母 存儲(chǔ)在驅(qū)動(dòng)程

11、序?qū)?yīng)注冊(cè)表鍵的”P(pán)refix”子鍵中 索引 區(qū)分同一驅(qū)動(dòng)程序管理的不同設(shè)備 缺省: 19; 可通過(guò)“index”的值指明起始索引數(shù)內(nèi)容 Windows CE設(shè)備管理 設(shè)備驅(qū)動(dòng)模型 驅(qū)動(dòng)程序的中斷處理 流接口驅(qū)動(dòng)程序 編寫(xiě)流接口驅(qū)動(dòng)程序流接口驅(qū)動(dòng)程序的入口點(diǎn)函數(shù) 流接口驅(qū)動(dòng)程序的DLL接口:每個(gè)流接口驅(qū)動(dòng)程序必須實(shí)現(xiàn)一組標(biāo)準(zhǔn)的函數(shù),用來(lái)完成標(biāo)準(zhǔn)的文件I/O和電源管理,提供給WinCE操作系統(tǒng)的內(nèi)核使用。單訪問(wèn)和多訪問(wèn) 問(wèn)題: 多個(gè)應(yīng)用程序能否同時(shí)訪問(wèn)同一個(gè)設(shè)備,或者說(shuō),驅(qū)動(dòng)程序是否允許設(shè)備同時(shí)被多次打開(kāi)處理? 使用hOpenContext參數(shù)來(lái)實(shí)現(xiàn)單訪問(wèn)和多訪問(wèn)。 如果是實(shí)現(xiàn)單訪問(wèn),則第一次對(duì)

12、XXX_open的調(diào)用返回一個(gè)合法值,保持該值的合法性,后來(lái)的調(diào)用都返回空值; 若是實(shí)現(xiàn)多訪問(wèn),對(duì)于XXX_open的調(diào)用每次都返回不同的值。流接口驅(qū)動(dòng)程序的實(shí)現(xiàn)(1) 選擇編寫(xiě)工具 Embedded Visual C Platform Builder 為了方便調(diào)試,選擇PB,在Windows CE模擬器中實(shí)現(xiàn)一個(gè)實(shí)現(xiàn)簡(jiǎn)單存儲(chǔ)功能的流接口驅(qū)動(dòng)程序流接口驅(qū)動(dòng)程序的實(shí)現(xiàn)(2) 創(chuàng)建內(nèi)核。 打開(kāi)Platform Builder的“new Platform”的向?qū)Вx擇下一步的“Emulator :X86”選項(xiàng),然后選擇自定義選項(xiàng),輸入工程名稱;在CustomDevice中選擇GUI選項(xiàng);在Appli

13、cation&services development中選擇“ATL”、”C Library&runtime”、”MSMQ”、”MFC”、”SDK for wince”;最后,單擊完成即可。流接口驅(qū)動(dòng)程序的實(shí)現(xiàn)(3) 創(chuàng)建驅(qū)動(dòng)程序的工程。 選擇“WCE DynamicLink Library”項(xiàng)流接口驅(qū)動(dòng)程序的實(shí)現(xiàn)(4) 創(chuàng)建并編寫(xiě)驅(qū)動(dòng)程序源文件:流接口驅(qū)動(dòng)程序的實(shí)現(xiàn)(5) 編寫(xiě)驅(qū)動(dòng)程序代碼。 STR_init STR_Deinit STR_Open STR_Close STR_Read STR_Write 導(dǎo)出接口函數(shù) Def文件String.Def流接口驅(qū)動(dòng)程序的實(shí)現(xiàn)(6) 編寫(xiě)驅(qū)動(dòng)程序的注冊(cè)表部分 兩種方法 直接修改PB下面的reg文件; 自己寫(xiě)一個(gè)注冊(cè)表文件通過(guò)添加組件的方式添加到內(nèi)核中。流接口驅(qū)動(dòng)程序的實(shí)現(xiàn)(7) 添加驅(qū)動(dòng)程序到定制的內(nèi)核 有了驅(qū)動(dòng)程序和注冊(cè)表文件,驅(qū)動(dòng)程序還不能夠正確運(yùn)行,必須把它添加到內(nèi)核中。 方法:

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論