精華區beta Programming 關於我們 聯絡資訊
驅動程式漫談-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