1. 程式人生 > >koject、kset、ktype驅動基礎結構體

koject、kset、ktype驅動基礎結構體

隨著技術的不斷進步,系統的拓撲結構也越來越複雜,對智慧電源管理、熱插拔的支援要求也越來越高,2.4核心已經難以滿足這些需求。為適應這種形勢的需要,Linux 2.6核心提供了全新的核心裝置模型。

1.0  kobject  

          這是一個結構體,所有驅動結構但必一個kobject ,如struct device struct device_driver  struct bus_type

函式的作用,是對結構體的填衝與操作,linux核心有面向物件的思想,所以理解了結構體內的內容,就明白函式的作用,所以首要任務是理解結構體。

 //include/linux/kobject.h

 63 struct kobject {  
 64     const char          *name;//1
 65     struct list_head    entry;//2
 66     struct kobject      *parent;//3
 67     struct kset         *kset;//4
 68     struct kobj_type    *ktype;//5
 69     struct kernfs_node  *sd; /* sysfs directory entry *///6
 70     struct kref         kref;//7   計算引用,每次呼叫必加1,
 71 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE
 72     struct delayed_work release;
 73 #endif
 74     unsigned int state_initialized:1;
 75     unsigned int state_in_sysfs:1;
 76     unsigned int state_add_uevent_sent:1;
 77     unsigned int state_remove_uevent_sent:1;
 78     unsigned int uevent_suppress:1;
 79 };

 struct kobject
--64-->name表示kobject物件的名字,對應sysfs下的一個目錄。
--65-->entry是kobject中插入的head_list結構,
--66-->parent是指向當前kobject父物件的指標,體現在sys結構中就是包含當前kobject物件的目錄物件,
--67-->kset表示當前kobject物件所屬的集合,
--68-->ktype表示當前kobject的型別。
--69-->sd用於表示VFS檔案系統的目錄項,是裝置與檔案之間的橋樑,sysfs中的符號連結就是通過kernfs_node內的聯合體實現的。
--70-->kref是對kobject的引用計數,當引用計數為0時,就回調之前註冊的release方法釋放該物件。
--74-->state_initialized:1初始化標誌位,在物件初始化時被置位,表示物件是否已經被初始化。
--75-->state_in_sysfs:1表示kobject物件在sysfs中的狀態,在對應目錄中被建立則置1,否則為0。
--76-->state_add_uevent_sent:1是新增裝置的uevent事件是否傳送標誌,新增裝置時會向用戶空間傳送uevent事件,請求新增裝置。
--77-->state_remove_uevent_sent:1是刪除裝置的uevent事件是否傳送標誌,刪除裝置時會向用戶空間傳送uevent事件,請求解除安裝裝置