




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、pci 設(shè)備 windows通用驅(qū)動(dòng)程序設(shè)計(jì)摘 要通用高速pci 總線目標(biāo)模塊全面地討論了windows設(shè)備驅(qū)動(dòng)程序編寫時(shí)所面臨的主要問題及解決方案關(guān)鍵詞經(jīng)常要在機(jī)的軟件中訪問和控制硬件設(shè)備包括 windows95/98windows 2000為了保證系統(tǒng)的安全性對(duì)應(yīng)用程序訪問硬件資源加以限制 windows下的驅(qū)動(dòng)程序不僅僅包括物理設(shè)備的驅(qū)動(dòng)程序?yàn)榱撕?jiǎn)化問題本文將以撏酶咚伲校茫勺芟吣勘昴探討pci 設(shè)備的驅(qū)動(dòng)程序設(shè)計(jì)方案它可以完成一般pci 設(shè)備驅(qū)動(dòng)所需的功能?y?3d2? ? 1y ?y?3d ? ?32dd?dd? ? ?y?3d?pc 機(jī)程序稱為用戶程序所以大多數(shù)情況下驅(qū)動(dòng)程序也不能通
2、用一般至少要設(shè)計(jì)windows 9x和windows nt兩個(gè)驅(qū)動(dòng)程序版本同時(shí)它又推出一個(gè)新的win32 drivers mode (wdm)驅(qū)動(dòng)類型如 usb設(shè)備這個(gè)新的類型實(shí)際是在windows nt的驅(qū)動(dòng)模型的基礎(chǔ)上增加了即插即用等內(nèi)容先前叫windowsnt5.0 3? ?d3? ? wdm在近一兩年還無法替代其它類型的設(shè)備驅(qū)動(dòng)0 級(jí)2 級(jí)和 3 級(jí)而用戶程序運(yùn)行在3 級(jí)上具體的限制在不同的操作系統(tǒng)中是不同的windows 95支持的驅(qū)動(dòng)類型很多主要是 vxd 和打印機(jī)驅(qū)動(dòng)兩類 運(yùn)行在intel 系統(tǒng)的0 級(jí)上對(duì)任何i/o 設(shè)備有全部訪問權(quán) 驅(qū)動(dòng)通常以放在windowssystem 目
3、錄下也可以在程序運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)地載入但打印機(jī)驅(qū)動(dòng)程序不是vxd?windows 95類似kernel modeuser mode) 之分pci 通用驅(qū)動(dòng)程序要求對(duì)各種硬件資源訪問開發(fā)設(shè)備驅(qū)動(dòng)采用的主要開發(fā)工具是微軟為設(shè)備開發(fā)者提供的軟件包device driver kit(ddk) ?d a? ?to ?a?t?ddk 中還定義了一些設(shè)備驅(qū)動(dòng)可以調(diào)用的系統(tǒng)底層服務(wù)中斷服務(wù)可安裝文件系統(tǒng)服務(wù)等等但windows 95 的 ddk 由于主要使用匯編語言描述因此是基于c/c+的使用和維護(hù)都較windows ddk容易驅(qū)動(dòng)程序的特點(diǎn)在設(shè)計(jì)驅(qū)動(dòng)程序之前更需要詳細(xì)了解硬件設(shè)備的特性需要了解的最主要的硬
4、件特性包括設(shè)備的總線結(jié)構(gòu)設(shè)備采用什么總線結(jié)構(gòu)非常關(guān)鍵如 isa 和 pci? ?y?3d ?22?寄存器要了解設(shè)置的控制寄存器以及這些寄存器工作的特性設(shè)備錯(cuò)誤和狀態(tài)要了解如何判斷設(shè)備的狀態(tài)和錯(cuò)誤信號(hào)port也就是通過cpu 的 in/out指令進(jìn)行數(shù)據(jù)讀寫但 pci 規(guī)范不包括從屬dma 的說明設(shè)備內(nèi)存許多設(shè)備自身帶有內(nèi)存有的設(shè)備還要通過驅(qū)動(dòng)程序設(shè)置設(shè)備的接口寄存器在 ddk文檔中有規(guī)定這是根據(jù)設(shè)備的不同而不同的但基本功能就是完成設(shè)備的初始化中斷的設(shè)置如前面所說但驅(qū)動(dòng)程序所要完成的工作卻是相同的僅在需要的地方指出兩個(gè)操作系統(tǒng)的不同? pci 器件的資源和對(duì)pci 器件中斷的服務(wù)所有軟件擴(kuò)展 r
5、om 碼pci bios 規(guī)范有完整的有關(guān)pci bios 功能的描述 在 pci 設(shè)備驅(qū)動(dòng)程序的初始化過程中devicevendorindex 1y?pc ibios確認(rèn)其存在總線號(hào)這是該器件利用總線號(hào)功能的 pci 配置空間設(shè)備驅(qū)動(dòng)就需要從配置空間獲得硬件的參數(shù)包括所用的中斷號(hào)存儲(chǔ)器的地址存儲(chǔ)器映射方式等讀寫配置空間可以調(diào)用bios 中斷 1ah?y?y? (0cfch) 進(jìn)行讀寫最重要的是獲得基址寄存器(badr)?3?y2?t? ?apci 設(shè)備分配新的資源而基址 4 是按內(nèi)存方式映射的可以讀對(duì)應(yīng)端口的配置寄存器(configuration register)?d? 0 位表示其是按內(nèi)
6、存方式設(shè)置的內(nèi)存方式和i/o 方式的配置寄存器的含義參見文獻(xiàn)如果要獲得基址的大小然后讀基址寄存器從第 4 位開始的0 的數(shù)目表示基址的大小則從第 2 位開始的0 的數(shù)目表示基址的大小查找pci 設(shè)備的工作是由halgtebusdata 完成的但 ddk 推薦使用haigetbusdataoffset 函數(shù)) 端口操作在 pc 機(jī)上所以處理方法也不同它不象內(nèi)存有實(shí)模式和保護(hù)模式之分在 windows 9x下而不一定非通過專門的驅(qū)動(dòng)程序來完成甚至可以不用專門設(shè)計(jì)驅(qū)動(dòng)程序由于pci 總線是32位的總線標(biāo)準(zhǔn)而且以前大多數(shù)c/c+編譯軟件都沒有提供雙字的函數(shù)在 windows nt下級(jí)的用戶程序和用戶模
7、式驅(qū)動(dòng)程序直接使用 i/o 指令所以任何對(duì)i/o 的操作都需要借助內(nèi)核模式驅(qū)動(dòng)來完成一是在驅(qū)動(dòng)程序中使用ioreportresourceusage 報(bào)告資源占用函數(shù)讀寫另一種是驅(qū)動(dòng)程序修改nt 的 i/opermissions map(iopm)?a ?3d2 ? 3?i/o 指令進(jìn)行操作用戶程序設(shè)計(jì)簡(jiǎn)單程序不能移植到非intel 的系統(tǒng)中 ? ? ? ? ?e?cpu 尋址方式上的不同windows 采用了分段分頁機(jī)制如圖這樣使應(yīng)用程序產(chǎn)生一種錯(cuò)覺這樣做最大的好處就是一個(gè)程序可以很容易地在物理內(nèi)存容量不一樣的編程人員使用虛擬存儲(chǔ)器可以寫出比任何實(shí)際配置的物理存儲(chǔ)器都大得多的程序通過分段機(jī)制再
8、通過分頁機(jī)制線性地址被分割成頁目錄(page directory)? ?d?win32 進(jìn)程時(shí)并建立它自己的頁目錄頁目錄的地址也同時(shí)放入進(jìn)程的現(xiàn)場(chǎng)信息中系統(tǒng)首先從cpu 控制器cr3 中讀出頁目錄所在的地址再根據(jù)頁表得到實(shí)際代碼最后再根據(jù)頁偏移訪問特定的單元但應(yīng)用程序讀寫的是虛擬地址從物理地址到線性地址的轉(zhuǎn)換工作也是由驅(qū)動(dòng)程序來完成的使用ddk 的 vmmcall?y?3d ? ?3?2? a?vxd 的系統(tǒng)服務(wù)mapphystolinear pvoid mapphystolineag(const void * physaddr,dword nbytes,dword flags);其中第一個(gè)參
9、數(shù)physaddr 就是要映射的內(nèi)存的物理地址的起始位置flags 必須設(shè)置為0?1? ? ?2? ?比如要映射物理內(nèi)存ed000000h 開始的 4096 個(gè)字節(jié) pchar *pointertopage=(pchar)mapphystolinear(pvoid)oxed000000,4096,0);而將 pointertopage 傳遞給調(diào)用驅(qū)動(dòng)的用戶程序而通過對(duì)這個(gè)指針的操作就可以實(shí)現(xiàn)對(duì)物理內(nèi)存ed000000h 進(jìn)行讀寫首先調(diào)用ioreportresourceusage 請(qǐng)求使用設(shè)備的內(nèi)存再使用mmmapiospace 把設(shè)備的內(nèi)存映射到虛擬空間調(diào)用 mmunmapiospace斷開設(shè)
10、備的內(nèi)存和虛擬空間的連接) 中斷的設(shè)置響應(yīng)與調(diào)用應(yīng)該在驅(qū)動(dòng)程序中完成完成ddk 還提供了響應(yīng)中斷事件的服務(wù)vpicd 服務(wù)用來管理所有硬件中斷事件對(duì)一個(gè)特定的irq 中斷源或者允許其它vxd 重載中斷處理函數(shù)要處理硬件中斷應(yīng)該從vhardwareint繼承一個(gè)類個(gè)類中在 windows nt中設(shè)備驅(qū)動(dòng)首先使用 halgetinterrupuvector將與總線有關(guān)的中斷向量轉(zhuǎn)換為系統(tǒng)的中斷向量 ?da ?3d?y?2 ? ?1|? ?t? 1? ?a?t ?deviceiocontrol 函數(shù)就可以同設(shè)備驅(qū)動(dòng)程序交換數(shù)據(jù)了可以調(diào)用closehandle(hvxd)這種調(diào)用方式也是windows nt調(diào)用設(shè)備驅(qū)動(dòng)的標(biāo)準(zhǔn)方法如 dpmi 方式在兩個(gè)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 以客戶運(yùn)營為中心
- 2025年化妝品營銷策劃方案經(jīng)典
- 2025年鄉(xiāng)村幼兒園工作方案
- 2025年冷餐會(huì)方案
- 2025年七一建黨104周年活動(dòng)方案策劃
- 2025年全國交通安全日學(xué)校工作方案
- 2025年文明禮儀實(shí)施方案
- 機(jī)械生產(chǎn)安全知識(shí)講座課件
- 渠道經(jīng)銷商管理
- 廣西崇左市大新縣2025年三下數(shù)學(xué)期末聯(lián)考試題含解析
- 公司安全隱患排查獎(jiǎng)勵(lì)制度
- 航空運(yùn)輸安全檢查制度
- 2024北京重點(diǎn)校初二(下)期中語文匯編:基礎(chǔ)知識(shí)綜合
- 湖北省襄陽市2023-2024學(xué)年高一上學(xué)期期末考試化學(xué)試題(含答案)
- 物業(yè)管理保潔服務(wù)項(xiàng)目投標(biāo)方案(投標(biāo)方案)
- 2.2 邏輯思維的基本要求 課件高中政治統(tǒng)編版選擇性必修三邏輯與思維
- 施工升降機(jī)專項(xiàng)施工方案
- 影響健康因素多 課件 2024-2025學(xué)年人教版(2024)初中體育與健康七年級(jí)全一冊(cè)
- DB11T 3034-2023 建筑消防設(shè)施檢測(cè)服務(wù)規(guī)范
- 鋼結(jié)構(gòu)防腐油漆施工方案
- (招聘面試)河北信用社招聘筆試真題
評(píng)論
0/150
提交評(píng)論