Linux2.6.29裝置模型分析-概述

s_e_a_n發表於2010-07-12

1 裝置模型概述

2.6版本開始,Linux開發團隊便為核心建立起一個統一的裝置模型。在以前的核心中沒有獨立的資料結構用來讓核心獲得系統整體配合的資訊。儘管缺乏這些資訊,在多數情況下核心還是能正常工作的。然而,隨著拓撲結構越來越複雜,以及要支援諸如電源管理等新特性的需求,向新版本的核心明確提出了這樣的要求:需要有一個對系統結構的一般性抽象描述,即裝置模型。

目的

I     裝置、驅動、匯流排等彼此之間關係錯綜複雜。如果想讓核心執行流暢,那就必須為每個模組編碼實現這些功能。如此一來,核心將變得非常臃腫、冗餘。而裝置模型的理念即是將這些程式碼抽象成各模組共用的框架,這樣不但程式碼簡潔了,也可讓裝置驅動開發者擺脫這本讓人頭痛但又必不可少的一劫,將有限的精力放於裝置差異性的實現。

II    裝置模型用類的思想將具有相似功能的裝置放到一起管理,並將相似部分萃取出來,使用一份程式碼實現。從而使結構更加清晰,簡潔。

III   動態分配主從裝置號,有效解決裝置號的不足。裝置模型實現了只有裝置在位時才為其分配主從裝置號,這與之前版本為每個裝置分配一個主從裝置號不同,使得有限的資源得到合理利用。

IV   裝置模型提供sysfs檔案系統,以檔案的方式讓本是抽象複雜而又無法捉摸的結構清晰可視起來。同時也給使用者空間程式配置處於核心空間的裝置驅動提供了一個友善的通道。

V   程式具有隨意性,同一個功能,不同的人實現的方法和風格各不相同,裝置驅動亦是如此。大量的裝置亦若實現方法流程均不相同,對以後的管理、重構將是難以想象的工作量。裝置模型恰是提供了一個模板,一個被證明過的最優的思路和流程,這減少了開發者設計過程中不必要的錯誤,也給以後的維護掃除了障礙。

任務

與使用者空間通訊

sysfs的實現與裝置模型密切相關,並且向外界展示了它所表述的結構。向使用者空間所提供的系統資訊,以及改變操作引數的介面,將越來越多地通過sysfs實現,也就是說,通過裝置模型實現。

熱插拔裝置

越來越多的計算機裝置可被動態的熱插拔了,也就是說,外圍裝置可根據使用者的需要安裝與解除安裝。核心中的熱插拔機制可以處理熱插拔裝置,特別是能夠與使用者空間進行關於熱插拔裝置的通訊,而這種機制也是通過裝置模型管理的。

裝置型別

系統中的許多部分對裝置如何連線的資訊並不感興趣,但是它們需要知道哪些型別的裝置是可以使用的。裝置模型包括了將裝置分類的機制,它會在更高的功能層上描述這些裝置,並使得這些裝置對使用者空間可見。

物件生命週期

上述許多功能,包括熱插拔支援和sysfs,使得核心中建立和管理物件的工作更為複雜。裝置模型的實現需要建立一系列機制以處理物件的生命週期、物件之間的關係,以及這些物件在使用者空間中的表示。

電源管理和系統關機

完成這些工作需要一些 對系統結構的理解。比如一個USB宿主介面卡,在處理完所有與其連線的裝置前是不能被關閉的。裝置模型使得作業系統能夠以正確的順序遍歷系統硬體。

圖例

我們以USB滑鼠為例,初識裝置模型。如圖1-1(來自LDD3)所示。圖中以簡化方式顯示了與USB滑鼠相關聯的裝置模型的一小部分。在圖的中央,可以看到核心“Devices”樹的一部分,它表明了滑鼠是如何連線到系統的。“Buses”樹跟蹤了連線到每個匯流排的裝置,在“Classes”下的子樹更關心裝置所提供的功能,而不是裝置是如何連線的。

 

1-1:裝置模型的一小片段

相關文章