簡介

在最高層級,裝置驅動程式的工作是為特定裝置提供統一介面,同時隱藏裝置實作的特定詳細資料。

舉例來說,兩個不同的乙太網路驅動程式都允許用戶端使用完全相同的 C 語言函式,透過介面傳送封包。每個驅動程式庫都負責管理自己的硬體,即使硬體不同,也要確保用戶端介面相同。

請注意,驅動程式庫提供的介面可能是「中介」介面,也就是說,這些介面不一定代表鏈結中的「最終」裝置。

請考慮使用 PCI 乙太網路裝置。 首先,您需要瞭解如何與 PCI 匯流排本身通訊的基礎 PCI 驅動程式庫。這個驅動程式庫完全不瞭解乙太網路,但知道如何處理機器上的特定 PCI 晶片組。

這項服務會列舉該匯流排上的裝置、從每個裝置上的各種暫存器收集資訊,並提供函式,讓用戶端 (例如以 PCI 為基礎的乙太網路驅動程式庫) 執行 PCI 作業,例如分配中斷或 DMA 管道。

因此,這個基本 PCI 驅動程式庫會為乙太網路驅動程式庫提供服務,讓乙太網路驅動程式庫管理相關聯的硬體。

同時,其他裝置 (例如顯示卡) 也可能以類似方式使用基本 PCI 驅動程式庫來管理硬體。

Fuchsia 模型

為了提供最大的彈性,Fuchsia 世界中的驅動程式可以繫結至相符的「父項」裝置,並發布自己的「子項」。這個階層會視需要擴展:一個驅動程式庫可能會發布子項,但另一個驅動程式庫會將該子項視為父項,而第二個驅動程式庫會發布自己的子項,依此類推。

如要瞭解這項功能如何運作,請參閱以 PCI 為基礎的乙太網路範例。

系統會先提供特殊的「PCI 根」父項。這實際上是說「我知道這個系統上有 PCI 匯流排,找到後請在這裡繫結」。

系統會評估驅動程式 (搜尋目錄),並自動繫結相符的驅動程式。

在本例中,系統會找到並繫結至「PCI 根」父項的驅動程式庫。

這是基本 PCI 驅動程式庫。 負責設定 PCI 匯流排,並列舉匯流排上的周邊裝置。

PCI 匯流排有特定的周邊裝置識別慣例:供應商 ID (VID) 和裝置 ID (DID) 的組合可明確識別所有可能的 PCI 裝置。列舉期間,系統會從周邊裝置讀取這些值,並發布含有偵測到的 VID 和 DID (以及大量其他資訊) 的新父節點。

每次發布新裝置時,系統都會重複上述程序 (適用於初始 PCI 根裝置發布),也就是由系統評估驅動程式,並搜尋符合新父項特徵的驅動程式。

我們在 PCI 根裝置中搜尋的驅動程式庫,必須符合特定類型的功能 (稱為「通訊協定」,我們稍後會看到),但在這個案例中,我們搜尋的驅動程式必須符合不同的通訊協定,也就是滿足「是 PCI 裝置且具有指定 VID 和 DID」的通訊協定。

如果找到合適的驅動程式庫 (符合必要通訊協定、VID 和 DID),就會繫結至父項。

在繫結過程中,我們會初始化驅動程式庫,包括設定卡片以供運作、啟動介面,以及發布這個裝置的一或多個子項。以 PCI 乙太網路驅動程式庫為例,它會發布「乙太網路」介面,這個介面符合另一個通訊協定,稱為「乙太網路實作」通訊協定。這個通訊協定代表與用戶端使用的函式相近的常見通訊協定 (但已移除一個步驟,稍後會再說明)。