linux裝置模型之kobject

2021-07-03 06:52:09 字數 821 閱讀 2179

kobject 結構

在linux核心裡,kobject是組成linux裝置模型的基礎,乙個kobject對應sysfs裡的

乙個目錄。從物件導向的角度來說,kobject可以看作是所有裝置物件的基類,因為c

語言並沒有物件導向的語法,所以一般是把kobject內嵌到其他結構體裡來實現類似的

作用,這裡的其他結構體可以看作是kobject的派生類。kobject為linux裝置模型提

供了很多有用的功能,比如引用計數,介面抽象,父子關係等等。引用計數本質上就

是利用kref實現的。

另外,linux裝置模型還有乙個重要的資料結構kset。kset本身也是乙個kobject,所

以它在sysfs裡同樣表現為乙個目錄,但它和kobject的不同之處在於kset可以看作是

乙個容器,如果你把它模擬為c++裡的容器類如list也無不可。kset之所以能作為容

器來使用,其內部正是內嵌了乙個雙向鍊錶結構struct list_head。

核裡的裝置之間是以樹狀形式組織的,在這種組織架構裡比較靠上層的節點可以看作是下層節點的父節點,反映到sysfs裡就是上級目錄和下級目錄之間的關係,在核心裡

,正是kobject幫助我們實現這種父子關係。在kobject的定義裡,name表示的是

kobject在sysfs中的名字;指標parent用來指向kobject的父物件;kref大家應該比

較熟悉了,kobject通過它來實現引用計數;kset指標用來指向這個kobject所屬的

kset,下文會再詳細描述kset的用法;對於ktype,如果只是望文生義的話,應該是

用來描述kobject的型別資訊。

Linux驅動之裝置模型 3

4 小結 4.1 kobject,kset和ktype kobject,kset和ktype就三個結構體,但是卻很容易讓人混淆,是由於它們內部相互交織。l kobject,是裝置模型中的基本物件,包含了引用計數,父子關係,目錄項等,通常會嵌入到其它的資料結構中,使其也具有kobject的特性 l k...

Linux驅動之裝置模型 5

6 裝置 6.1 裝置 l linux裝置模型中每乙個裝置用device結構來表示 struct device 6.2 裝置屬性 l 裝置屬性由device attribute來表示 structdevice attribute device attr name,mode,show,store l ...

Linux驅動之裝置模型 8

9 小結 9.1 匯流排,裝置,驅動和類之間的關係 l 匯流排相當於乙個容器,是device和device driver的管理機構,它包含了乙個device集合 devices kset 和乙個驅動集合 drivers kset 分別表示掛依附於此匯流排的所有裝置和所有驅動。l 驅動依附在匯流排上,...