PCI設(shè)備Windows通用驅(qū)動程序設(shè)計_第1頁
PCI設(shè)備Windows通用驅(qū)動程序設(shè)計_第2頁
PCI設(shè)備Windows通用驅(qū)動程序設(shè)計_第3頁
PCI設(shè)備Windows通用驅(qū)動程序設(shè)計_第4頁
PCI設(shè)備Windows通用驅(qū)動程序設(shè)計_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、pci 設(shè)備 windows通用驅(qū)動程序設(shè)計摘 要通用高速pci 總線目標模塊全面地討論了windows設(shè)備驅(qū)動程序編寫時所面臨的主要問題及解決方案關(guān)鍵詞經(jīng)常要在機的軟件中訪問和控制硬件設(shè)備包括 windows95/98windows 2000為了保證系統(tǒng)的安全性對應(yīng)用程序訪問硬件資源加以限制 windows下的驅(qū)動程序不僅僅包括物理設(shè)備的驅(qū)動程序為了簡化問題本文將以撏酶咚伲校茫勺芟吣勘昴探討pci 設(shè)備的驅(qū)動程序設(shè)計方案它可以完成一般pci 設(shè)備驅(qū)動所需的功能?y?3d2? ? 1y ?y?3d ? ?32dd?dd? ? ?y?3d?pc 機程序稱為用戶程序所以大多數(shù)情況下驅(qū)動程序也不能通

2、用一般至少要設(shè)計windows 9x和windows nt兩個驅(qū)動程序版本同時它又推出一個新的win32 drivers mode (wdm)驅(qū)動類型如 usb設(shè)備這個新的類型實際是在windows nt的驅(qū)動模型的基礎(chǔ)上增加了即插即用等內(nèi)容先前叫windowsnt5.0 3? ?d3? ? wdm在近一兩年還無法替代其它類型的設(shè)備驅(qū)動0 級2 級和 3 級而用戶程序運行在3 級上具體的限制在不同的操作系統(tǒng)中是不同的windows 95支持的驅(qū)動類型很多主要是 vxd 和打印機驅(qū)動兩類 運行在intel 系統(tǒng)的0 級上對任何i/o 設(shè)備有全部訪問權(quán) 驅(qū)動通常以放在windowssystem 目

3、錄下也可以在程序運行時根據(jù)需要動態(tài)地載入但打印機驅(qū)動程序不是vxd?windows 95類似kernel modeuser mode) 之分pci 通用驅(qū)動程序要求對各種硬件資源訪問開發(fā)設(shè)備驅(qū)動采用的主要開發(fā)工具是微軟為設(shè)備開發(fā)者提供的軟件包device driver kit(ddk) ?d a? ?to ?a?t?ddk 中還定義了一些設(shè)備驅(qū)動可以調(diào)用的系統(tǒng)底層服務(wù)中斷服務(wù)可安裝文件系統(tǒng)服務(wù)等等但windows 95 的 ddk 由于主要使用匯編語言描述因此是基于c/c+的使用和維護都較windows ddk容易驅(qū)動程序的特點在設(shè)計驅(qū)動程序之前更需要詳細了解硬件設(shè)備的特性需要了解的最主要的硬

4、件特性包括設(shè)備的總線結(jié)構(gòu)設(shè)備采用什么總線結(jié)構(gòu)非常關(guān)鍵如 isa 和 pci? ?y?3d ?22?寄存器要了解設(shè)置的控制寄存器以及這些寄存器工作的特性設(shè)備錯誤和狀態(tài)要了解如何判斷設(shè)備的狀態(tài)和錯誤信號port也就是通過cpu 的 in/out指令進行數(shù)據(jù)讀寫但 pci 規(guī)范不包括從屬dma 的說明設(shè)備內(nèi)存許多設(shè)備自身帶有內(nèi)存有的設(shè)備還要通過驅(qū)動程序設(shè)置設(shè)備的接口寄存器在 ddk文檔中有規(guī)定這是根據(jù)設(shè)備的不同而不同的但基本功能就是完成設(shè)備的初始化中斷的設(shè)置如前面所說但驅(qū)動程序所要完成的工作卻是相同的僅在需要的地方指出兩個操作系統(tǒng)的不同? pci 器件的資源和對pci 器件中斷的服務(wù)所有軟件擴展 r

5、om 碼pci bios 規(guī)范有完整的有關(guān)pci bios 功能的描述 在 pci 設(shè)備驅(qū)動程序的初始化過程中devicevendorindex 1y?pc ibios確認其存在總線號這是該器件利用總線號功能的 pci 配置空間設(shè)備驅(qū)動就需要從配置空間獲得硬件的參數(shù)包括所用的中斷號存儲器的地址存儲器映射方式等讀寫配置空間可以調(diào)用bios 中斷 1ah?y?y? (0cfch) 進行讀寫最重要的是獲得基址寄存器(badr)?3?y2?t? ?apci 設(shè)備分配新的資源而基址 4 是按內(nèi)存方式映射的可以讀對應(yīng)端口的配置寄存器(configuration register)?d? 0 位表示其是按內(nèi)

6、存方式設(shè)置的內(nèi)存方式和i/o 方式的配置寄存器的含義參見文獻如果要獲得基址的大小然后讀基址寄存器從第 4 位開始的0 的數(shù)目表示基址的大小則從第 2 位開始的0 的數(shù)目表示基址的大小查找pci 設(shè)備的工作是由halgtebusdata 完成的但 ddk 推薦使用haigetbusdataoffset 函數(shù)) 端口操作在 pc 機上所以處理方法也不同它不象內(nèi)存有實模式和保護模式之分在 windows 9x下而不一定非通過專門的驅(qū)動程序來完成甚至可以不用專門設(shè)計驅(qū)動程序由于pci 總線是32位的總線標準而且以前大多數(shù)c/c+編譯軟件都沒有提供雙字的函數(shù)在 windows nt下級的用戶程序和用戶模

7、式驅(qū)動程序直接使用 i/o 指令所以任何對i/o 的操作都需要借助內(nèi)核模式驅(qū)動來完成一是在驅(qū)動程序中使用ioreportresourceusage 報告資源占用函數(shù)讀寫另一種是驅(qū)動程序修改nt 的 i/opermissions map(iopm)?a ?3d2 ? 3?i/o 指令進行操作用戶程序設(shè)計簡單程序不能移植到非intel 的系統(tǒng)中 ? ? ? ? ?e?cpu 尋址方式上的不同windows 采用了分段分頁機制如圖這樣使應(yīng)用程序產(chǎn)生一種錯覺這樣做最大的好處就是一個程序可以很容易地在物理內(nèi)存容量不一樣的編程人員使用虛擬存儲器可以寫出比任何實際配置的物理存儲器都大得多的程序通過分段機制再

8、通過分頁機制線性地址被分割成頁目錄(page directory)? ?d?win32 進程時并建立它自己的頁目錄頁目錄的地址也同時放入進程的現(xiàn)場信息中系統(tǒng)首先從cpu 控制器cr3 中讀出頁目錄所在的地址再根據(jù)頁表得到實際代碼最后再根據(jù)頁偏移訪問特定的單元但應(yīng)用程序讀寫的是虛擬地址從物理地址到線性地址的轉(zhuǎn)換工作也是由驅(qū)動程序來完成的使用ddk 的 vmmcall?y?3d ? ?3?2? a?vxd 的系統(tǒng)服務(wù)mapphystolinear pvoid mapphystolineag(const void * physaddr,dword nbytes,dword flags);其中第一個參

9、數(shù)physaddr 就是要映射的內(nèi)存的物理地址的起始位置flags 必須設(shè)置為0?1? ? ?2? ?比如要映射物理內(nèi)存ed000000h 開始的 4096 個字節(jié) pchar *pointertopage=(pchar)mapphystolinear(pvoid)oxed000000,4096,0);而將 pointertopage 傳遞給調(diào)用驅(qū)動的用戶程序而通過對這個指針的操作就可以實現(xiàn)對物理內(nèi)存ed000000h 進行讀寫首先調(diào)用ioreportresourceusage 請求使用設(shè)備的內(nèi)存再使用mmmapiospace 把設(shè)備的內(nèi)存映射到虛擬空間調(diào)用 mmunmapiospace斷開設(shè)

10、備的內(nèi)存和虛擬空間的連接) 中斷的設(shè)置響應(yīng)與調(diào)用應(yīng)該在驅(qū)動程序中完成完成ddk 還提供了響應(yīng)中斷事件的服務(wù)vpicd 服務(wù)用來管理所有硬件中斷事件對一個特定的irq 中斷源或者允許其它vxd 重載中斷處理函數(shù)要處理硬件中斷應(yīng)該從vhardwareint繼承一個類個類中在 windows nt中設(shè)備驅(qū)動首先使用 halgetinterrupuvector將與總線有關(guān)的中斷向量轉(zhuǎn)換為系統(tǒng)的中斷向量 ?da ?3d?y?2 ? ?1|? ?t? 1? ?a?t ?deviceiocontrol 函數(shù)就可以同設(shè)備驅(qū)動程序交換數(shù)據(jù)了可以調(diào)用closehandle(hvxd)這種調(diào)用方式也是windows nt調(diào)用設(shè)備驅(qū)動的標準方法如 dpmi 方式在兩個

溫馨提示

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

評論

0/150

提交評論