網頁

搜尋此網誌

2016年1月22日 星期五

Driver Development 驅動程式開發

什麼是驅動程式?

驅動程式 (Driver) 是一種軟體元件,介於作業系統 (Operating System) 和硬體裝置 (Device),用途是讓作業系統和裝置彼此能夠溝通。從系統層面上看,由上而下分別是應用程式 (Application)、作業系統、驅動程式與裝置,如下圖所示。

驅動程式在架構上是分層堆疊 (layered in a stack) 而成,因此驅動程式不一定只和硬體裝置溝通,可能和其他驅動程式溝通。驅動程式依照用途不同可以分為下列幾類:
  • 功能驅動程式 (Function Driver)
    直接與硬體裝置直接溝通的驅動程式,稱為 Function Driver。
  • 篩選器驅動程式 (Filter Driver)
    輔助處理 I/O 請求的驅動程式,與其他驅動程式相互溝通,稱為 Filter Driver。
  • 軟體驅動程式 (Software Driver)
    與硬體裝置無關,是為了處理作業系統的核心資料結構,稱為 Software Driver。
  • 匯流排驅動程式 (Bus Driver)
    驅動匯流排以建立裝置樹的驅動程式,稱為 Bus Driver。

驅動程式由誰開發?

驅動程式是由裝置的設計者或製造者所開發,讓作業系統知道如何操作此裝置,進行資料的讀寫。另一方面,依照硬體標準所設計和製造的裝置,這些驅動程式可能就由作業系統廠商開發提供。

驅動程式模型 (Driver Model)

開發硬體裝置的驅動程式有3種模型:
  • VxD (Virtual Device Driver):概念是將硬體裝置虛擬化,讓多個應用程式可以共用實際的硬體,所以稱為「虛擬裝置驅動程式」。是 MS-DOS、Windows 3.x 和 Windows 95 使用的技術。
  • Windows Driver Model (WDM):非 NT-based 的 Windows 98 與 Windows Me,以及 NT-based 的 Windows 2000 與 Windows XP 使用的技術。
  • Windows Driver Frameworks (WDF) ,以前稱為 Windows Driver Foundation (WDF),這是 Windows Vista 以後使用的技術,WDF 包含兩種框架:

硬體裝置的作業系統觀點

在 Windows 系統中,硬體裝置表示為隨插即用裝置樹 (Plug and Play Device Tree,簡稱 Device Tree) 中的裝置節點 (Device Node),裝置節點之間具有父子 (parent/child) 關係,裝置節點由多個裝置物件 (Device Object) 所堆疊組成,稱為裝置節點的裝置堆疊 (Device Stack)

裝置物件是一個DEVICE_OBJECT結構,每個裝置物件會有它對應的驅動程式,在系統上表示為驅動程式物件 (Driver Object) ,是一種DRIVER_OBJECT結構,從另一個觀點來看,裝置堆疊可以看成是「裝置物件—驅動程式」組合所堆疊而成。

裝置物件依據建立的驅動程式不同,區分為:
  • 由 Bus Driver 建立的裝置物件,稱為  Physical Device Object (PDO)。
  • 由 Function Driver 建立的裝置物件,稱為  Functional Device Object (FDO)。
  • 由 Filter Driver 建立的裝置物件,稱為  Filter Device Object (Filter DO)。
注意到 Bus Driver 建立的裝置物件,如果這個裝置物件本身就是匯流排的話,那 Bus Driver 所建立的是 FDO 而不是 PDO。換句話說,一個驅動程式可能同時兼具 Bus Driver 和 Function Driver 的角色功能。另外,一個 Driver Object 可以建立多個 Device Object,這也符合直覺上一個 Driver 可以驅動很多 Device 的想法。

參考資料:
###

熱門文章