驅動程式漫談-XII
匯流排控制器與初始化循環
所有的匯流排控制器,
在設備堆疊的初始化過程中,
都賦予一項天職:清點下游設備。
在匯流排控制器本身初始化設定完成後,
其驅動程式隨即可展開清點下游設備的工作,
但範圍只及於直接連結的下游裝置。
如果直接連結的下游裝置中,
如果還有其它的匯流排控制器,
則該其它匯流排控制器下游裝置,
並不在清點工作範圍之內。
也就是說每一種匯流排控制器,
只清點接連下一級的裝置,
也就是直接裝置,
至於間接連結裝置,
則屬於下一級匯流排控制器的管區。
例如,
如果有一個電腦系統,
CPU接出來後首先接到PCI Controller,
然後從PCI Bus 接出來會再接出到USB Controller,
然後再從USB Bus 接出來出接到USB bus Keyboard,
則這個系統在初始化時,
USB Controller由PCI Controller負責清點,
USB bus Keyboard由USB Controller負責清點。
PDO與FDO、清點與組態設定
現在我們將焦點放在單一的週邊裝置上,
每一個裝置在初始化的過程,
基本上都分為三個階段:
第一個階段:
被其上游的匯流排控制器偵測、清點到,
然後匯流排控制器的會為其建立一個基本資料表,
賦予基本的裝置標示碼,
並將其註冊到作業系統中。
例如,
這個基本資料表,
在Windows 的WDM 架構中,
叫作PDO,
Linux 也有類似的東西,
其中由PCI Controller 建立的基本資料表叫作Pci_Dev。
(如果是直接到CPU的裝置,就不會有被清點的程序)
第二個階段:
週邊裝置驅動程式中的初始化程序被呼叫,
該初始化程序會在作業系統所集的基本資料表列冊中,
尋找屬於該週邊裝置的基本資料表及得知裝置標示碼。
第三個階段:
初始化程序以裝置標示碼作為裝置辨識參數,
呼叫匯流排控制器驅動程式,
藉以操作週邊裝置完成組態設定工作,
並向該裝置所屬的Class Driver完成註冊工作,
成為Class Driver 管轄下的一個FDO。
(Linux也是相同的機制,但各種類別的驅動程式間沒有一個統一的特別名稱)
因此,
我們可以發現,
一個設備驅動程式,
在初始化的過程中,
向下要先找到自己的PDO,
向上要註冊自己成為FDO。
PDO與FDO,
剛好是驅動程式嵌入作業系統時,
對下及對上介面連接的象徵。
==未完,待續==
--
Ξ Origin: 中興大學天樞資訊網 <bbs.nchu.edu.tw>
Ξ From : 220-139-18-180.dynamic.hinet.net