




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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)程序 編寫流接口驅(qū)動(dòng)程序設(shè)備管理體系結(jié)構(gòu) 設(shè)備管理的分層模式用戶軟件設(shè)備無關(guān)的系統(tǒng)軟件硬件抽象層4個(gè)部分:I/O管理;PnP管理;電源管理;管理和支撐的例程庫設(shè)備管理體系結(jié)構(gòu)(續(xù)) I/O管理 隔離應(yīng)用層程序和內(nèi)核,負(fù)責(zé)注冊和管理流接口驅(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)變化; 硬件支持 例程庫設(shè)備管理器 Windows CE設(shè)備管理器 設(shè)備管理的核心機(jī)構(gòu),負(fù)責(zé)跟蹤、維護(hù)系統(tǒng)設(shè)備信息并對設(shè)備資源進(jìn)行調(diào)配 Device.exe 用戶級(jí)程序(不是內(nèi)核的一部分?。?設(shè)備管理器的任務(wù) 系統(tǒng)啟動(dòng)或收到用戶添加外圍設(shè)備的信息時(shí)初始化驅(qū)動(dòng)程序的加載 向內(nèi)核注冊特定的文件名 通過從外圍設(shè)備獲得即插即用標(biāo)識(shí)符,或激活一個(gè)檢查子程序來發(fā)現(xiàn)可以處理該設(shè)備的驅(qū)動(dòng)程序,為外圍設(shè)備找到合適的驅(qū)動(dòng)程序 通過讀寫注冊表加載、跟蹤驅(qū)動(dòng)程序 不需要設(shè)備時(shí),卸載驅(qū)動(dòng)程序流接口驅(qū)動(dòng)程序的加載 加載的三種方法 系統(tǒng)啟動(dòng)時(shí)加載 注冊表項(xiàng):HKEY_LOCAL_
3、MACHINEdriversRootKey HKEY_LOCAL_MACHINEdriversBuiltIn 設(shè)備管理器自動(dòng)檢測外圍設(shè)備時(shí)加載 例:PC卡 使用ActivateDeviceEx加載 設(shè)備管理器不能自動(dòng)檢測或加載時(shí)使用 例:串口設(shè)備ActivateDeviceEx函數(shù) 接口HANDLE ActivateDeviceEx( LPCWSTR lpzaDevKey, /字符串指針,指向設(shè)備驅(qū)動(dòng)程序的注冊鍵 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)程序注冊的句柄 通過內(nèi)部函數(shù)StartOneDriver實(shí)現(xiàn)ActivateDeviceEx的使用 一個(gè)驅(qū)動(dòng)程序注冊表部分的內(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)程序 編寫流接口驅(qū)動(dòng)程序驅(qū)動(dòng)程序模型 驅(qū)動(dòng)程序模型 決定了驅(qū)動(dòng)程序的軟件接口 不同的驅(qū)動(dòng)程序模型通過它們支持的軟件接口來區(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è)備,如鍵盤、顯示器、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)程序 一般類型的設(shè)備驅(qū)動(dòng)程序,支持幾乎所有可連接在WinCE平臺(tái)上的外部設(shè)備(更常用?。?表現(xiàn)為用戶級(jí)DLL 實(shí)現(xiàn)一組流接口函數(shù),這些函數(shù)使得應(yīng)用程序可以通過文件系統(tǒng)訪問驅(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ù)語 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)程序 編寫流接口驅(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ù)注冊自己,然后使用WaitForSingleObject等待中斷請求事件 在驅(qū)動(dòng)程序的XXX_Init里完成IS
8、T中斷處理 要實(shí)現(xiàn)IST必須實(shí)現(xiàn)兩個(gè)過程: IST的中斷必須和一個(gè)事件相關(guān)聯(lián) IST必須通過WaitForSingleObject等待該事件的喚醒 具體實(shí)現(xiàn)過程(XXX_Init函數(shù)中定義): 創(chuàng)建一個(gè)事件(CreateEvent) 得到系統(tǒng)的中斷號(hào)(KernelIoControl) 創(chuàng)建一個(gè)掛起的IST(CreateThread) 設(shè)置IST優(yōu)先級(jí)(CeSetThreadPriority) 注冊中斷(InterruptInitialize) 恢復(fù)IST,IST開始服務(wù)(ResumeThread) 通過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)程序 編寫流接口驅(qū)動(dòng)程序流接口驅(qū)動(dòng)程序的工作結(jié)構(gòu) 設(shè)備作為文件系統(tǒng)的一個(gè)特殊文件相關(guān)的注冊表項(xiàng) HKEY_LOCAL_MACHINEDrivers鍵 設(shè)備管理程序使用該鍵中的注冊鍵管理驅(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è)大寫字母 存儲(chǔ)在驅(qū)動(dòng)程
11、序?qū)?yīng)注冊表鍵的”Prefix”子鍵中 索引 區(qū)分同一驅(qū)動(dòng)程序管理的不同設(shè)備 缺省: 19; 可通過“index”的值指明起始索引數(shù)內(nèi)容 Windows CE設(shè)備管理 設(shè)備驅(qū)動(dòng)模型 驅(qū)動(dòng)程序的中斷處理 流接口驅(qū)動(dòng)程序 編寫流接口驅(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ù),用來完成標(biāo)準(zhǔn)的文件I/O和電源管理,提供給WinCE操作系統(tǒng)的內(nèi)核使用。單訪問和多訪問 問題: 多個(gè)應(yīng)用程序能否同時(shí)訪問同一個(gè)設(shè)備,或者說,驅(qū)動(dòng)程序是否允許設(shè)備同時(shí)被多次打開處理? 使用hOpenContext參數(shù)來實(shí)現(xiàn)單訪問和多訪問。 如果是實(shí)現(xiàn)單訪問,則第一次對
12、XXX_open的調(diào)用返回一個(gè)合法值,保持該值的合法性,后來的調(diào)用都返回空值; 若是實(shí)現(xiàn)多訪問,對于XXX_open的調(diào)用每次都返回不同的值。流接口驅(qū)動(dòng)程序的實(shí)現(xiàn)(1) 選擇編寫工具 Embedded Visual C Platform Builder 為了方便調(diào)試,選擇PB,在Windows CE模擬器中實(shí)現(xiàn)一個(gè)實(shí)現(xiàn)簡單存儲(chǔ)功能的流接口驅(qū)動(dòng)程序流接口驅(qū)動(dòng)程序的實(shí)現(xiàn)(2) 創(chuàng)建內(nèi)核。 打開Platform Builder的“new Platform”的向?qū)?,選擇下一步的“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)建并編寫驅(qū)動(dòng)程序源文件:流接口驅(qū)動(dòng)程序的實(shí)現(xiàn)(5) 編寫驅(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) 編寫驅(qū)動(dòng)程序的注冊表部分 兩種方法 直接修改PB下面的reg文件; 自己寫一個(gè)注冊表文件通過添加組件的方式添加到內(nèi)核中。流接口驅(qū)動(dòng)程序的實(shí)現(xiàn)(7) 添加驅(qū)動(dòng)程序到定制的內(nèi)核 有了驅(qū)動(dòng)程序和注冊表文件,驅(qū)動(dòng)程序還不能夠正確運(yùn)行,必須把它添加到內(nèi)核中。 方法:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家用電器銷售合同
- 廣州手房買賣合同
- 美團(tuán)外賣活動(dòng)策劃方案
- 醫(yī)療器械公司勞動(dòng)合同
- 庭院綠化施工合同
- 高效辦公工具使用解決方案
- 環(huán)保產(chǎn)業(yè)技術(shù)創(chuàng)新與應(yīng)用合作協(xié)議
- 地產(chǎn)項(xiàng)目土地開發(fā)合作合同
- 個(gè)人分包勞務(wù)分包合同
- 新興技術(shù)交流及應(yīng)用方案推進(jìn)工作指引
- 2020外研版九年級(jí)英語上全冊課文原文及翻譯
- 大象版科學(xué)四年級(jí)下冊12奇妙的植物課件及練習(xí)題和答案
- 某大型企業(yè)空調(diào)系統(tǒng)內(nèi)部培訓(xùn)(圖文127)
- 譯林版高中英語擴(kuò)展創(chuàng)新學(xué)程一詞匯表
- 讀書分享-《教育的情調(diào)》
- 《材料力學(xué)》說課-課件
- 與常見距離的比賽時(shí)間對應(yīng)的VDOT值
- 義務(wù)教育物理課程標(biāo)準(zhǔn)(2022年版word版)
- 研學(xué)旅行概論教學(xué)課件匯總完整版電子教案
- 12月腹痛護(hù)理常規(guī)
- 控股集團(tuán)公司組織架構(gòu)圖.docx
評(píng)論
0/150
提交評(píng)論