• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 關 閉

    新聞中心

    EEPW首頁 > 工控自動化 > 設計應用 > PCI設備Windows通用驅動程序設計

    PCI設備Windows通用驅動程序設計

    作者: 時間:2009-05-13 來源:網絡 收藏

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


    上一頁 1 2 3 下一頁

    關鍵詞: Windows PCI 設備 驅動

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 抚顺县| 休宁县| 和林格尔县| 南投市| 文安县| 开远市| 达日县| 界首市| 长武县| 阳原县| 沙田区| 临城县| 伊春市| 汝州市| 石景山区| 萝北县| 汾西县| 邛崃市| 三门峡市| 池州市| 扬中市| 东乡族自治县| 泸水县| 清水县| 长寿区| 车致| 南开区| 康保县| 手机| 同仁县| 仲巴县| 天全县| 库尔勒市| 潍坊市| 阿鲁科尔沁旗| 禄劝| 新源县| 克什克腾旗| 洛阳市| 新蔡县| 济宁市|