<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > Windows設(shè)備驅(qū)動(dòng)程序編寫時(shí)的主要問(wèn)題及解決方案

          Windows設(shè)備驅(qū)動(dòng)程序編寫時(shí)的主要問(wèn)題及解決方案

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

          結(jié)合“通用高速PCI總線目標(biāo)模塊”的驅(qū)動(dòng)程序設(shè)計(jì),全面地討論了Windows設(shè)備(特別是PCI設(shè)備)驅(qū)動(dòng)程序編寫時(shí)所面臨的主要問(wèn)題及解決方案,并提出了封裝設(shè)備驅(qū)動(dòng)的方法。

          關(guān)鍵詞: PCI設(shè)備驅(qū)動(dòng)程序 端口 內(nèi)存 中斷 封裝

          在設(shè)計(jì)和使用PCI設(shè)備時(shí),經(jīng)常要在PC機(jī)的軟件中訪問(wèn)和控制硬件設(shè)備,但Windows操作系統(tǒng)(包括Windows95/98、Windows NT、Windows 2000為了保證系統(tǒng)的安全性、穩(wěn)定性和可移植性,對(duì)應(yīng)用程序訪問(wèn)硬件資源加以限制,這就要求設(shè)計(jì)設(shè)備驅(qū)動(dòng)程序以實(shí)現(xiàn)PC機(jī)的軟件對(duì)PCI設(shè)備的訪問(wèn)。

          Windows下的驅(qū)動(dòng)程序不僅僅包括物理設(shè)備的驅(qū)動(dòng)程序,也包括為文件系統(tǒng)等非物理設(shè)備編寫的虛擬設(shè)備驅(qū)動(dòng)程序。為了簡(jiǎn)化問(wèn)題,下面只討論硬件物理設(shè)備的驅(qū)動(dòng)程序
          。本文將以撏ㄓ酶咚伲校茫勺芟吣勘昴?閿[1]的驅(qū)動(dòng)設(shè)計(jì)為例,探討PCI設(shè)備的驅(qū)動(dòng)程序設(shè)計(jì)方案。我們開發(fā)了一套通用的PCI設(shè)備驅(qū)動(dòng)程序,它可以完成一般PCI設(shè)備驅(qū)動(dòng)所需的功能,可以作為其它PCI設(shè)備驅(qū)動(dòng)開發(fā)的框架。

          1 驅(qū)動(dòng)程序的模式和開發(fā)工具的選擇
          設(shè)備驅(qū)動(dòng)程序是指管理某個(gè)外圍設(shè)備的一段代碼。驅(qū)動(dòng)程序不會(huì)獨(dú)立地存在,而是操作系統(tǒng)的一部分。通過(guò)設(shè)備驅(qū)動(dòng)程序,多個(gè)進(jìn)程可以同時(shí)使用這些資源,從而可以實(shí)現(xiàn)多進(jìn)程并行運(yùn)行。

          在下文中,將調(diào)用設(shè)備驅(qū)動(dòng)程序的pc機(jī)程序稱為用戶程序。
          Windows 95和Windows NT采用的驅(qū)動(dòng)程序體系不同,所以大多數(shù)情況下驅(qū)動(dòng)程序也不能通用。如果設(shè)備需要在Windows 9X/NT下使用,一般至少要設(shè)計(jì)Windows 9X和Windows NT兩個(gè)驅(qū)動(dòng)程序版本。wINDOWS 98 可以兼容Windows 95的驅(qū)動(dòng)程序,同時(shí)它又推出一個(gè)新的Win32 Drivers Mode (WDM)驅(qū)動(dòng)類型。Windows 98中有些設(shè)備(如USB設(shè)備)的驅(qū)動(dòng)程序必須為WDM模式。這個(gè)新的類型實(shí)際是在Windows NT的驅(qū)動(dòng)模型的基礎(chǔ)上增加了即插即用等內(nèi)容。WDM驅(qū)動(dòng)也可以用在Windows 2000(先前叫Windows NT5.0)中。從長(zhǎng)遠(yuǎn)的角度看。今后開發(fā)人員只要開發(fā)WDM驅(qū)動(dòng)就可以了,但從目前的市場(chǎng)情況來(lái)看,Windws 95是無(wú)法放棄的,所以WDM在近一兩年還無(wú)法替代其它類型的設(shè)備驅(qū)動(dòng)。
          Intel 80386以上的微處理器有4個(gè)優(yōu)先級(jí)別:0級(jí)、1級(jí)、2級(jí)和3級(jí),一般操作系統(tǒng)運(yùn)行于優(yōu)先級(jí)0級(jí)上,而用戶程序運(yùn)行在3級(jí)上,在對(duì)硬件操作上有一些限制(具體的限制在不同的操作系統(tǒng)中是不同的)。
          Windows 95支持的驅(qū)動(dòng)類型很多,但針對(duì)一般硬件設(shè)備而言,主要是VxD和打印機(jī)驅(qū)動(dòng)兩類。
          VxD指的是Virtual Device Drivers。VxD運(yùn)行在Intel系統(tǒng)的0級(jí)上,可以執(zhí)行特權(quán)級(jí)指令,對(duì)任何I/O設(shè)備有全部訪問(wèn)權(quán),所以大多數(shù)硬件驅(qū)動(dòng)程序都是VxD。VxD驅(qū)動(dòng)通常以.vxd為擴(kuò)展名,放在WindowsSystem目錄下,可以在Windws 95啟動(dòng)時(shí)裝入,也可以在程序運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)地載入。
          動(dòng)態(tài)加載有助于節(jié)約系統(tǒng)內(nèi)存和資源。但打印機(jī)驅(qū)動(dòng)程序不是VxD,它運(yùn)行在3級(jí)上。同Windows 95類似,Windows NT的驅(qū)動(dòng)也有可以運(yùn)行在0級(jí)的內(nèi)核模式(Kernel Mode)和運(yùn)行在3極的用戶模式(User Mode)之分。由于Windows NT禁止用戶模式的程序訪問(wèn)I/O端口(wINDOWS 95/98則允許用戶程序直接訪問(wèn)I/O端口),直接控制物理設(shè)備的驅(qū)動(dòng)程序都是內(nèi)核模式的。而我們?cè)O(shè)計(jì)的PCI通用驅(qū)動(dòng)程序要求對(duì)各種硬件資源訪問(wèn),所以應(yīng)該選擇工作在0級(jí)的驅(qū)動(dòng)程序模式。
          開發(fā)設(shè)備驅(qū)動(dòng)采用的主要開發(fā)工具是微軟為設(shè)備開發(fā)者提供的軟件包Device Driver Kit (DDK)。這個(gè)軟件包包括有關(guān)設(shè)備開發(fā)的文檔、編譯需要的頭文件和庫(kù)文件、調(diào)試工具和程序范例。在DDK中還定義了一些設(shè)備驅(qū)動(dòng)可以調(diào)用的系統(tǒng)底層服務(wù),象DMA服務(wù)、中斷服務(wù)、內(nèi)存管理服務(wù)、可安裝文件系統(tǒng)服務(wù)等等。
          這些都是編寫設(shè)備驅(qū)動(dòng)所必須的。但Windows 95的DDK由于主要使用匯編語(yǔ)言描述。開發(fā)起來(lái)比較困難。


          因此,我們?cè)赪indows 95操作系統(tǒng)中同時(shí)采用了Numega公司的產(chǎn)品VtoolsD。VtoolsD是基于C/C++的,支持Borland C++和Visual C++,使用和維護(hù)都較Windows DDK容易。


          2 PCI驅(qū)動(dòng)程序的特點(diǎn) 在設(shè)計(jì)驅(qū)動(dòng)程序之前,首先要對(duì)欲控制的硬件設(shè)備進(jìn)行細(xì)致地分析,更需要詳細(xì)了解硬件設(shè)備的特性。硬件設(shè)備的特性會(huì)對(duì)驅(qū)動(dòng)程序設(shè)計(jì)產(chǎn)生重大的影響。需要了解的最主要的硬件特性包括:

          (1)設(shè)備的總線結(jié)構(gòu)
          設(shè)備采用什么總線結(jié)構(gòu)非常關(guān)鍵,因?yàn)椴煌目偩€類型(如ISA和PCI)在許多硬件工作機(jī)制上是不同的,所以驅(qū)動(dòng)程序設(shè)計(jì)也不同。
          (2)寄存器 要了解設(shè)置的控制寄存器、數(shù)據(jù)寄存器和狀態(tài)寄存器,以及這些寄存器工作的特性。 (3)設(shè)備錯(cuò)誤和狀態(tài) 要了解如何判斷設(shè)備的狀態(tài)和錯(cuò)誤信號(hào),這些信號(hào)要通過(guò)驅(qū)動(dòng)程序返回給用戶。 (4)中斷行為 要了解設(shè)備產(chǎn)生中斷的條件和使用中斷的數(shù)量。
          (5)數(shù)據(jù)傳輸機(jī)制 最常見(jiàn)的數(shù)據(jù)傳輸機(jī)制是通過(guò)I/O端口(port),也就是通過(guò)CPU的IN/OUT指令進(jìn)行數(shù)據(jù)讀寫。PC的另一種重要的傳輸機(jī)制是DMA,但PCI規(guī)范不包括從屬DMA的說(shuō)明。
          (6)設(shè)備內(nèi)存 許多設(shè)備自身帶有內(nèi)存,PCI設(shè)備大多是采用映射的方式映射到PC系統(tǒng)的物理內(nèi)存。有的設(shè)備還要通過(guò)驅(qū)動(dòng)程序設(shè)置設(shè)備的接口寄存器。
          有關(guān)驅(qū)動(dòng)程序的加載和響應(yīng)用戶請(qǐng)求的內(nèi)容,在DDK文檔中有規(guī)定,所以設(shè)計(jì)設(shè)備驅(qū)動(dòng)程序主要的面臨問(wèn)題是如何進(jìn)行硬件操作,這是根據(jù)設(shè)備的不同而不同的。而硬件驅(qū)動(dòng)程序的功能雖然千差萬(wàn)別,但基本功能就是完成設(shè)備的初始化、對(duì)端口的讀寫操作、中斷的設(shè)置、響應(yīng)和調(diào)用以及對(duì)內(nèi)存的直接讀寫。如前面所說(shuō),Windows 9X和Windows NT的操作系統(tǒng)模型不同,但驅(qū)動(dòng)程序所要完成的工作卻是相同的,所以下面以Windows 9X為主進(jìn)行介紹,僅在需要的地方指出兩個(gè)操作系統(tǒng)的不同。

          下面從這幾方面討論解決這些問(wèn)題的途徑:
          (1)設(shè)備初始化
          PCI設(shè)備驅(qū)動(dòng)程序要實(shí)現(xiàn)識(shí)別PCI器件、尋址PCI器件的資源和對(duì)PCI器件中斷的服務(wù)。PCI系統(tǒng)BIOS功能提供了BIOS的訪問(wèn)與控制的具體特征,所有軟件

          模擬電路文章專題:模擬電路基礎(chǔ)

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



          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();