<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > PCI設備Windows通用驅動(dòng)程序設計

PCI設備Windows通用驅動(dòng)程序設計

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

在設計和使用時(shí),經(jīng)常要在PC機的軟件中訪(fǎng)問(wèn)和控制硬件,但操作系統(包括 95/98、 NT、Windows 2000)為了保證系統的安全性、穩定性和可移植性,對應用程序訪(fǎng)問(wèn)硬件資源加以限制,這就要求設計程序以實(shí)現PC機的軟件對設備的訪(fǎng)問(wèn)。
  Windows下的程序不僅僅包括物理設備的程序,也包括為文件系統等非物理設備編寫(xiě)的虛擬設備驅動(dòng)程序。為了簡(jiǎn)化問(wèn)題,下面只討論硬件物理設備的驅動(dòng)程序。本文將以“通用高速總線(xiàn)目標模塊”[1]的驅動(dòng)設計為例,探討PCI設備的驅動(dòng)程序設計方案。我們開(kāi)發(fā)了一套通用的PCI設備驅動(dòng)程序,它可以完成一般PCI設備驅動(dòng)所需的功能,可以作為其它PCI設備驅動(dòng)開(kāi)發(fā)的框架。
1 驅動(dòng)程序的模式和開(kāi)發(fā)工具的選擇
  設備驅動(dòng)程序是指管理某個(gè)外圍設備的一段代碼。驅動(dòng)程序不會(huì )獨立地存在,而是操作系統的一部分。通過(guò)設備驅動(dòng)程序,多個(gè)進(jìn)程可以同時(shí)使用這些資源,從而可以實(shí)現多進(jìn)程并行運行。在下文中,將調用設備驅動(dòng)程序的PC機程序稱(chēng)為用戶(hù)程序。
  Windows 95和Windows NT采用的驅動(dòng)程序體系不同,所以大多數情況下驅動(dòng)程序也不能通用。如果設備需要在Windows 9x/NT下使用,一般至少要設計Windows 9x和Windows NT兩個(gè)驅動(dòng)程序版本。Windows 98 可以兼容Windows 95的驅動(dòng)程序,同時(shí)它又推出一個(gè)新的Win32 Drivers Mode(WDM)驅動(dòng)類(lèi)型。Windows 98中有些設備(如USB設備)的驅動(dòng)程序必須為WDM模式。這個(gè)新的類(lèi)型實(shí)際是在Windows NT的驅動(dòng)模型的基礎上增加了即插即用等內容。WDM驅動(dòng)也可以用在Windows 2000(先前叫Windows NT 5.0)中。從長(cháng)遠的角度看。今后開(kāi)發(fā)人員只要開(kāi)發(fā)WDM驅動(dòng)就可以了,但從目前的市場(chǎng)情況來(lái)看,Windows 95是無(wú)法放棄的,所以WDM在近一兩年還無(wú)法替代其它類(lèi)型的設備驅動(dòng)。
  Intel 80386以上的微處理器有4個(gè)優(yōu)先級別:0級、1級、2級和3級,一般操作系統運行于優(yōu)先級0級上,而用戶(hù)程序運行在3級上,在對硬件操作上有一些限制(具體的限制在不同的操作系統中是不同的)。Windows 95支持的驅動(dòng)類(lèi)型很多,但針對一般硬件設備而言,主要是VxD和打印機驅動(dòng)兩類(lèi)。VxD指的是Virtual Device Drivers。VxD運行在Intel系統的0級上,可以執行特權級指令,對任何I/O設備有全部訪(fǎng)問(wèn)權,所以大多數硬件驅動(dòng)程序都是VxD。VxD驅動(dòng)通常以.vxd為擴展名,放在WindowsSystem目錄下,可以在Windows 95啟動(dòng)時(shí)裝入,也可以在程序運行時(shí)根據需要動(dòng)態(tài)地載入。動(dòng)態(tài)加載有助于節約系統內存和資源。但打印機驅動(dòng)程序不是VxD,它運行在3級上。同Windows 95類(lèi)似,Windows NT的驅動(dòng)也有可以運行在0級的內核模式(Kernel Mode)和運行在3極的用戶(hù)模式(User Mode)之分。由于Windows NT禁止用戶(hù)模式的程序訪(fǎng)問(wèn)I/O端口(Windows 95/98則允許用戶(hù)程序直接訪(fǎng)問(wèn)I/O端口),直接控制物理設備的驅動(dòng)程序都是內核模式的。而我們設計的PCI通用驅動(dòng)程序要求對各種硬件資源訪(fǎng)問(wèn),所以應該選擇工作在0級的驅動(dòng)程序模式。
  開(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 95操作系統中同時(shí)采用了Numega公司的產(chǎn)品VtoolsD。VtoolsD是基于C/C++的,支持Borland C++和Visual C++,使用和維護都較Windows 95 DDK容易。
2 PCI驅動(dòng)程序的特點(diǎn)
  在設計驅動(dòng)程序之前,首先要對欲控制的硬件設備進(jìn)行細致地分析,更需要詳細了解硬件設備的特性。硬件設備的特性會(huì )對驅動(dòng)程序設計產(chǎn)生重大的影響。需要了解的最主要的硬件特性包括:
  (1)設備的總線(xiàn)結構
  設備采用什么總線(xiàn)結構非常關(guān)鍵,因為不同的總線(xiàn)類(lèi)型(如ISA和PCI)在許多硬件工作機制上是不同的,所以驅動(dòng)程序設計也不同。
  (2)寄存器
  要了解設置的控制寄存器、數據寄存器和狀態(tài)寄存器,以及這些寄存器工作的特性。
  (3)設備錯誤和狀態(tài)
  要了解如何判斷設備的狀態(tài)和錯誤信號,這些信號要通過(guò)驅動(dòng)程序返回給用戶(hù)。
  (4)中斷行為
  要了解設備產(chǎn)生中斷的條件和使用中斷的數量。
  (5)數據傳輸機制
  最常見(jiàn)的數據傳輸機制是通過(guò)I/O端口(port),也就是通過(guò)CPU的IN/OUT指令進(jìn)行數據讀寫(xiě)。PC的另一種重要的傳輸機制是DMA,但PCI規范不包括從屬DMA的說(shuō)明。
  (6)設備內存
  許多設備自身帶有內存,PCI設備大多是采用映射的方式映射到PC系統的物理內存。有的設備還要通過(guò)驅動(dòng)程序設置設備的接口寄存器。
  有關(guān)驅動(dòng)程序的加載和響應用戶(hù)請求的內容,在DDK文檔中有規定,所以設計設備驅動(dòng)程序主要的面臨問(wèn)題是如何進(jìn)行硬件操作,這是根據設備的不同而不同的。而硬件驅動(dòng)程序的功能雖然千差萬(wàn)別,但基本功能就是完成設備的初始化、對端口的讀寫(xiě)操作、中斷的設置、響應和調用以及對內存的直接讀寫(xiě)。如前面所說(shuō),Windows 9x和Windows NT的操作系統模型不同,但驅動(dòng)程序所要完成的工作卻是相同的,所以下面以Windows 9x為主進(jìn)行介紹,僅在需要的地方指出兩個(gè)操作系統的不同。


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

關(guān)鍵詞: Windows PCI 設備 驅動(dòng)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>