色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > PCI設(shè)備WINDOWS驅(qū)動程序的開發(fā)

          PCI設(shè)備WINDOWS驅(qū)動程序的開發(fā)

          作者: 時間:2012-04-18 來源:網(wǎng)絡(luò) 收藏

          本文主要介紹了在Windows9x操作系統(tǒng)下開發(fā)的方法。
          關(guān)鍵詞:

          概述
          近幾年來,隨著諸如圖形處理、圖像處理、三維動畫技術(shù)的發(fā)展,計算機(jī)與外設(shè)通信需要處理的數(shù)據(jù)量迅速增加,基于ISA總線的通信方式已經(jīng)不能滿足高速數(shù)據(jù)傳輸?shù)囊?,PCI局部總線的引用就是為了打破高速數(shù)據(jù)傳輸?shù)钠款i。PCI總線的英文全稱是:Peripheral Component Interconnect Special Interest Group,簡稱PCISIG,即外部器件互連。PCI是先進(jìn)的高性能局部總線,可同時支持多組外圍設(shè)備,具體表現(xiàn)在:
          (1) 以33MHz的時鐘頻率操作,(2) 采用32位數(shù)據(jù)總線,(3) 數(shù)據(jù)傳送率可高達(dá)132MB/s;
          (4) 支持突發(fā)傳輸,(5) 即總線主控設(shè)備(6) 發(fā)出地址之后,(7) 可以連續(xù)進(jìn)行多次數(shù)據(jù)傳送;
          (8) 提供了配置空間,(9) 能夠支持即插即用;
          (10) 支持3.3V電壓,(11) 有利于降低系統(tǒng)功耗。


          為了減少開發(fā)難度,縮短開發(fā)周期,我們建議選擇專用芯片。根據(jù)硬件要實(shí)現(xiàn)的功能,選擇芯片。
          以PLX公司的產(chǎn)品為例,PCI9052提供了5個局部地址存儲空間、支持中斷、支持從模式數(shù)據(jù)傳輸;PCI9054和PCI9080在PCI9052的基礎(chǔ)上又增加了主模式數(shù)據(jù)傳輸、兩個獨(dú)立的DMA通道和八個郵箱寄存器等功能。

          的模式和開發(fā)工具的選擇
          以上是對PCI設(shè)備硬件方面的介紹,為了實(shí)現(xiàn)PCI設(shè)備與計算機(jī)的通信,還需要開發(fā)PCI設(shè)備驅(qū)動程序。驅(qū)動程序是用來管理系統(tǒng)資源的可執(zhí)行二進(jìn)制代碼,與操作系統(tǒng)擁有相同的級別,不同的操作系統(tǒng)支持不同類型的驅(qū)動程序。目前在市場上比較流行的操作系統(tǒng)是Windows9x和WindowsNT這兩種系列。Windows9x包括Windows95、Windows98、WindowsME;WindowsNT包括WindowsNT4.0、Windows2000。Windows95支持VXD類型的驅(qū)動程序,而WindowsNT支持WDM類型的驅(qū)動程序,Windows98兼容Windows95的VXD驅(qū)動程序,同時它又推出一個新的Win32 Drivers Mode (WDM)驅(qū)動類型。這個新的類型實(shí)際是在Windows NT的驅(qū)動模型的基礎(chǔ)上增加了即插即用等內(nèi)容。WDM驅(qū)動也可以用在Windows 2000(先前叫Windows NT5.0)中。一個完善的驅(qū)動程序應(yīng)至少開發(fā)Windows 9X和Windows NT兩個版本。目前,雖然Windows 2000非常流行,但由于Windows98仍占有相當(dāng)規(guī)模的市場,而且它又兼容Windows95的VXD驅(qū)動程序,因此VXD驅(qū)動程序仍然實(shí)用。本文只介紹基于Windows9x系統(tǒng)下VXD驅(qū)動程序的開發(fā)。
          VXD是虛擬設(shè)備驅(qū)動程序的簡稱,x 代表各種設(shè)備的名字,如虛擬鍵盤驅(qū)動程序(vkd),虛擬鼠標(biāo)驅(qū)動程序(vmd)等等。開發(fā)驅(qū)動程序需要對硬件進(jìn)行操作,由于Intel 80386以上的微處理器有4個優(yōu)先級別:0級、1級、2級和3級,一般操作系統(tǒng)運(yùn)行于優(yōu)先級第0級上,而用戶程序運(yùn)行在第3級上,Windows9x操作系統(tǒng)對系統(tǒng)硬件采取了屏蔽的策略,限制了運(yùn)行于第3級的應(yīng)用程序?qū)ο到y(tǒng)資源(如中斷控制器、內(nèi)存等)的操作。但VXD運(yùn)行在最高級特權(quán)級——第0級,擁有操作系統(tǒng)的特權(quán),可以超越這些屏蔽,直接進(jìn)行系統(tǒng)硬件的操作。
          開發(fā)設(shè)備驅(qū)動采用的主要開發(fā)工具是微軟為設(shè)備開發(fā)者提供的軟件包Device Driver Kit (DDK)。這個軟件包包括有關(guān)設(shè)備開發(fā)的文檔、編譯需要的頭文件和庫文件、調(diào)試工具和程序范例。在DDK中還定義了一些設(shè)備驅(qū)動可以調(diào)用的系統(tǒng)底層服務(wù),如DMA服務(wù)、中斷服務(wù)、內(nèi)存管理服務(wù)、可安裝文件系統(tǒng)服務(wù)等等。這些都是編寫設(shè)備驅(qū)動所必須的。但由于Windows 95的DDK主要使用匯編語言描述,代碼可讀性不強(qiáng),開發(fā)起來比較困難。因此,我們在Windows 9x操作系統(tǒng)中采用了Numega公司的產(chǎn)品VtoolsD。VtoolsD是基于C/C++的,支持Borland C++和Visual C++,代碼可讀性強(qiáng),使用和維護(hù)都較Windows DDK容易。

          驅(qū)動程序的設(shè)計
          編寫設(shè)備驅(qū)動程序的目的是使被驅(qū)動的硬件可以管理系統(tǒng)資源,與PC機(jī)系統(tǒng)兼容,正常工作,通過設(shè)備驅(qū)動程序,多個進(jìn)程可以同時使用這些資源(如內(nèi)存、I/O、中斷源等),實(shí)現(xiàn)多進(jìn)程并行運(yùn)行。驅(qū)動程序是針對具體硬件設(shè)計的,不同硬件有不同的驅(qū)動程序,下面僅討論開發(fā)驅(qū)動程序幾個必要的通用的步驟。
          1、PCI配置空間簡介
          每個PCI設(shè)備都有自己的配置空間,用于支持即插即用,使之滿足現(xiàn)行的系統(tǒng)配置結(jié)構(gòu)。下面對PCI配置空間做一下簡要介紹。
          配置空間是一容量為256字節(jié)并具有特定結(jié)構(gòu)的地址空間。這個空間又分為頭標(biāo)區(qū)和設(shè)備有關(guān)區(qū)兩部分。頭標(biāo)區(qū)的長度是64字節(jié),每個設(shè)備都必須配置該區(qū)的寄存器。該區(qū)中的各個字段用來唯一地識別設(shè)備。其余的192字節(jié)因設(shè)備而異。配置空間的頭標(biāo)區(qū)64個字節(jié)的使用情況如圖1示。
          為了實(shí)現(xiàn)即插即用,系統(tǒng)可根據(jù)硬件資源的使用情況,為PCI設(shè)備分配新的資源。因此編寫設(shè)備驅(qū)動程序重點(diǎn)是獲得基址寄存器(Base Address)和中斷干線寄存器的內(nèi)容。配置空間共有六個基址寄存器和一個中斷干線寄存器,具體用法如下:
          PCI Base Address 0寄存器:系統(tǒng)利用此寄存器為PCI接口芯片的配置寄存器分配一段PCI地址空間,通過這段地址我們可以以內(nèi)存映射的形式訪問PCI接口芯片的配置寄存器。
          PCI Base Address 1寄存器:系統(tǒng)利用此寄存器為PCI接口芯片的配置寄存器分配一段PCI地址空間,通過這段地址我們可以以I/O的形式訪問PCI接口芯片的配置寄存器。
          PCI Base Address 2、3、4、5寄存器:系統(tǒng)BIOS利用這些寄存器分配PCI地址空間以支持PCI接口芯片的局部配置寄存器0、1、2、3的訪問。
          在所有基址寄存器中,第0位均為只讀位,表示這段地址映射到存儲器空間還是I/O空間,如果是“1”表示映射到I/O空間,如果是“0”則表示映射到存儲器空間。
          中斷干線寄存器(Interrupt Line):用于說明中斷線的連接情況,這個寄存器的值與標(biāo)準(zhǔn)8259的IRQ編號(0~15)對應(yīng)。

          設(shè)備識別號 供應(yīng)商識別號
          狀態(tài)寄存器 命令寄存器
          分類代碼 修改版本
          自測試 頭標(biāo)類型 延時計數(shù) Cache
          基址寄存器
          保留
          保留
          擴(kuò)展ROM基址寄存器
          保留
          保留
          Max-Lat Min-Gnt中斷引腳 中斷干線

          圖1 配置空間頭標(biāo)區(qū)

          2、設(shè)備初始化
          PCI設(shè)備驅(qū)動程序要完成識別PCI器件、分配PCI硬件資源、響應(yīng)PCI器件中斷等功能,這就需要訪問PCI配置空間來獲得必需的參數(shù)。實(shí)現(xiàn)在Windows9x操作系統(tǒng)下訪問PCI配置空間可以利用PCI系

          c++相關(guān)文章:c++教程



          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉