PCI設備WINDOWS驅動(dòng)程序的開(kāi)發(fā)
本文主要介紹了在Windows9x操作系統下開(kāi)發(fā)PCI設備驅動(dòng)程序的方法。
關(guān)鍵詞:PCI設備 驅動(dòng)程序
PCI設備概述
近幾年來(lái),隨著(zhù)諸如圖形處理、圖像處理、三維動(dòng)畫(huà)技術(shù)的發(fā)展,計算機與外設通信需要處理的數據量迅速增加,基于ISA總線(xiàn)的通信方式已經(jīng)不能滿(mǎn)足高速數據傳輸的要求,PCI局部總線(xiàn)的引用就是為了打破高速數據傳輸的瓶頸。PCI總線(xiàn)的英文全稱(chēng)是:Peripheral Component Interconnect Special Interest Group,簡(jiǎn)稱(chēng)PCISIG,即外部器件互連。PCI是先進(jìn)的高性能局部總線(xiàn),可同時(shí)支持多組外圍設備,具體表現在:
(1) 以33MHz的時(shí)鐘頻率操作,(2) 采用32位數據總線(xiàn),(3) 數據傳送率可高達132MB/s;
(4) 支持突發(fā)傳輸,(5) 即總線(xiàn)主控設備(6) 發(fā)出地址之后,(7) 可以連續進(jìn)行多次數據傳送;
(8) 提供了配置空間,(9) 能夠支持即插即用;
(10) 支持3.3V電壓,(11) 有利于降低系統功耗。
為了減少開(kāi)發(fā)難度,縮短開(kāi)發(fā)周期,我們建議選擇專(zhuān)用芯片。根據硬件要實(shí)現的功能,選擇芯片。
以PLX公司的產(chǎn)品為例,PCI9052提供了5個(gè)局部地址存儲空間、支持中斷、支持從模式數據傳輸;PCI9054和PCI9080在PCI9052的基礎上又增加了主模式數據傳輸、兩個(gè)獨立的DMA通道和八個(gè)郵箱寄存器等功能。
驅動(dòng)程序的模式和開(kāi)發(fā)工具的選擇
以上是對PCI設備硬件方面的介紹,為了實(shí)現PCI設備與計算機的通信,還需要開(kāi)發(fā)PCI設備驅動(dòng)程序。驅動(dòng)程序是用來(lái)管理系統資源的可執行二進(jìn)制代碼,與操作系統擁有相同的級別,不同的操作系統支持不同類(lèi)型的驅動(dòng)程序。目前在市場(chǎng)上比較流行的操作系統是Windows9x和WindowsNT這兩種系列。Windows9x包括Windows95、Windows98、WindowsME;WindowsNT包括WindowsNT4.0、Windows2000。Windows95支持VXD類(lèi)型的驅動(dòng)程序,而WindowsNT支持WDM類(lèi)型的驅動(dòng)程序,Windows98兼容Windows95的VXD驅動(dòng)程序,同時(shí)它又推出一個(gè)新的Win32 Drivers Mode (WDM)驅動(dòng)類(lèi)型。這個(gè)新的類(lèi)型實(shí)際是在Windows NT的驅動(dòng)模型的基礎上增加了即插即用等內容。WDM驅動(dòng)也可以用在Windows 2000(先前叫Windows NT5.0)中。一個(gè)完善的驅動(dòng)程序應至少開(kāi)發(fā)Windows 9X和Windows NT兩個(gè)版本。目前,雖然Windows 2000非常流行,但由于Windows98仍占有相當規模的市場(chǎng),而且它又兼容Windows95的VXD驅動(dòng)程序,因此VXD驅動(dòng)程序仍然實(shí)用。本文只介紹基于Windows9x系統下VXD驅動(dòng)程序的開(kāi)發(fā)。
VXD是虛擬設備驅動(dòng)程序的簡(jiǎn)稱(chēng),x 代表各種設備的名字,如虛擬鍵盤(pán)驅動(dòng)程序(vkd),虛擬鼠標驅動(dòng)程序(vmd)等等。開(kāi)發(fā)驅動(dòng)程序需要對硬件進(jìn)行操作,由于Intel 80386以上的微處理器有4個(gè)優(yōu)先級別:0級、1級、2級和3級,一般操作系統運行于優(yōu)先級第0級上,而用戶(hù)程序運行在第3級上,Windows9x操作系統對系統硬件采取了屏蔽的策略,限制了運行于第3級的應用程序對系統資源(如中斷控制器、內存等)的操作。但VXD運行在最高級特權級——第0級,擁有操作系統的特權,可以超越這些屏蔽,直接進(jìn)行系統硬件的操作。
開(kāi)發(fā)設備驅動(dòng)采用的主要開(kāi)發(fā)工具是微軟為設備開(kāi)發(fā)者提供的軟件包Device Driver Kit (DDK)。這個(gè)軟件包包括有關(guān)設備開(kāi)發(fā)的文檔、編譯需要的頭文件和庫文件、調試工具和程序范例。在DDK中還定義了一些設備驅動(dòng)可以調用的系統底層服務(wù),如DMA服務(wù)、中斷服務(wù)、內存管理服務(wù)、可安裝文件系統服務(wù)等等。這些都是編寫(xiě)設備驅動(dòng)所必須的。但由于Windows 95的DDK主要使用匯編語(yǔ)言描述,代碼可讀性不強,開(kāi)發(fā)起來(lái)比較困難。因此,我們在Windows 9x操作系統中采用了Numega公司的產(chǎn)品VtoolsD。VtoolsD是基于C/C++的,支持Borland C++和Visual C++,代碼可讀性強,使用和維護都較Windows DDK容易。
驅動(dòng)程序的設計
編寫(xiě)設備驅動(dòng)程序的目的是使被驅動(dòng)的硬件可以管理系統資源,與PC機系統兼容,正常工作,通過(guò)設備驅動(dòng)程序,多個(gè)進(jìn)程可以同時(shí)使用這些資源(如內存、I/O、中斷源等),實(shí)現多進(jìn)程并行運行。驅動(dòng)程序是針對具體硬件設計的,不同硬件有不同的驅動(dòng)程序,下面僅討論開(kāi)發(fā)驅動(dòng)程序幾個(gè)必要的通用的步驟。
1、PCI配置空間簡(jiǎn)介
每個(gè)PCI設備都有自己的配置空間,用于支持即插即用,使之滿(mǎn)足現行的系統配置結構。下面對PCI配置空間做一下簡(jiǎn)要介紹。
配置空間是一容量為256字節并具有特定結構的地址空間。這個(gè)空間又分為頭標區和設備有關(guān)區兩部分。頭標區的長(cháng)度是64字節,每個(gè)設備都必須配置該區的寄存器。該區中的各個(gè)字段用來(lái)唯一地識別設備。其余的192字節因設備而異。配置空間的頭標區64個(gè)字節的使用情況如圖1示。
為了實(shí)現即插即用,系統可根據硬件資源的使用情況,為PCI設備分配新的資源。因此編寫(xiě)設備驅動(dòng)程序重點(diǎn)是獲得基址寄存器(Base Address)和中斷干線(xiàn)寄存器的內容。配置空間共有六個(gè)基址寄存器和一個(gè)中斷干線(xiàn)寄存器,具體用法如下:
PCI Base Address 0寄存器:系統利用此寄存器為PCI接口芯片的配置寄存器分配一段PCI地址空間,通過(guò)這段地址我們可以以?xún)却嬗成涞男问皆L(fǎng)問(wèn)PCI接口芯片的配置寄存器。
PCI Base Address 1寄存器:系統利用此寄存器為PCI接口芯片的配置寄存器分配一段PCI地址空間,通過(guò)這段地址我們可以以I/O的形式訪(fǎng)問(wèn)PCI接口芯片的配置寄存器。
PCI Base Address 2、3、4、5寄存器:系統BIOS利用這些寄存器分配PCI地址空間以支持PCI接口芯片的局部配置寄存器0、1、2、3的訪(fǎng)問(wèn)。
在所有基址寄存器中,第0位均為只讀位,表示這段地址映射到存儲器空間還是I/O空間,如果是“1”表示映射到I/O空間,如果是“0”則表示映射到存儲器空間。
中斷干線(xiàn)寄存器(Interrupt Line):用于說(shuō)明中斷線(xiàn)的連接情況,這個(gè)寄存器的值與標準8259的IRQ編號(0~15)對應。
設備識別號 供應商識別號
狀態(tài)寄存器 命令寄存器
分類(lèi)代碼 修改版本
自測試 頭標類(lèi)型 延時(shí)計數 Cache
基址寄存器
保留
保留
擴展ROM基址寄存器
保留
保留
Max-Lat Min-Gnt中斷引腳 中斷干線(xiàn)
圖1 配置空間頭標區
2、設備初始化
PCI設備驅動(dòng)程序要完成識別PCI器件、分配PCI硬件資源、響應PCI器件中斷等功能,這就需要訪(fǎng)問(wèn)PCI配置空間來(lái)獲得必需的參數。實(shí)現在Windows9x操作系統下訪(fǎng)問(wèn)PCI配置空間可以利用PCI系
c++相關(guān)文章:c++教程
評論