struct
kobject
;
屬性相關的成員變數
@name:名稱
@kref:
引用計數,用於統計系統中引用該物件的次數。
? struct
kref
;
看似多此一舉,實際上是為了防止使用者直接操作refcount。用struct kref進行封裝後,使用者須通過固定的介面來操作。如 ?
void
kref_set(
struct
kref *kref,
int
num);
void
kref_init(
struct
kref *kref);
void
kref_get(
struct
kref *kref);
int
kref_put(
struct
kref *kref,
void
(*release) (
struct
kref *kref));
@ktype:?
struct
kobj_type
;
@release:
當kobject
的引用計數減為
0時,該指標指向的函式將被呼叫,進行
kobject
的釋放處理。
@default_attrs:該
kobject
所具有的屬性值,這些屬性值通過
sysfs
檔案系統到處到使用者空間,使用者也可
對這些值進行賦值。 ?
struct
attribute ;
@name:
屬性名@mode: 屬性模式
其餘兩個屬性僅在核心啟動了對鎖除錯的支援時才有用。
@sysfs_ops:
該結構包括兩個函式指標,其中
show
指向的函式用於向使用者匯出屬性值,而
store
在使用者對屬性進行賦值時被呼叫。 ?
struct
sysfs_ops ;
其餘變數用於命名空間的支援,此處忽略。
組織結構相關的成員變數
@kset:
本kobject所屬的kset。
kset是用於組織屬於某種特定型別的kobject物件集合,這裡的型別指的是對於某些時間具有某種相同
操作的意思。 ?
struct
kset ;
@list: 用於組織本kset內的kobject物件。
@list_lock: 自旋鎖,在遍歷本set中的kobject物件時實現互斥操作。
@kobj: kset作為乙個核心物件,其本身也作為kobject的乙個例項。
@uevent_ops: uevent事件的響應函式。 ?
struct
kset_uevent_ops ;
@filter: 過濾掉不感興趣的uevent事件
@name: 獲取subsystem環境變數
@uevent: uevent事件傳送函式。
@entry:
屬於同乙個kset的kobject物件會組織成雙向鍊錶形式,entry為相應的鏈結元素。 ?
struct
list_head
;
@parent: kobject除了根據其所屬的kset進行組織以外,同時會按照父子關係組織成樹形
結構,而parent則指向其父節點。
sysfs檔案系統相關的成員變數
@sysfs_dirent:
在sysfs檔案系統中對應的節點,該節點可能為乙個目錄、鏈結等。 ?
struct
sysfs_dirent ;
unsigned
int
s_flags;
unsigned
short
s_mode;
ino_t s_ino;
struct
sysfs_inode_attrs *s_iattr;
};
@s_count: 引用計數
@s_active: 對成員變數解除引用時,要獲得此變數的引用。
@s_parent; 父節點
@s_sibling: 兄弟節點
@s_name;
@s_ns;
@union *: 根據s_flags有不同實現。
@s_flags: 型別,只使用了低16位,在低16位中,低8位是節點型別,高8位是命名空間型別
@s_mode:
@s_ino: inode節點號
@s_iattr: 主要用於vfs層監視inode節點狀態改變。
Linux裝置模型分析之基本資料結構
linux隨著硬體裝置的發展及核心版本的演進,裝置模型也變得越來月複雜,早先看了 linux裝置驅動程式 覺得一頭霧水,又看了許多資料和高手的帖子,總算有了一定認識,下面寫出來和linux核心愛好者分享一下。一 底層資料結構 kobject 和kset1 kobject 核心物件 linux2.6 ...
Linux 塊裝置 資料結構
對於各種塊裝置,核心使用了一張塊裝置表blk dev來進行管理。每種塊裝置都在塊裝置表中佔據一項。塊裝置表中每個塊裝置項的資料結構為 塊裝置處理結構。struct blk dev struct 下面是請求佇列中項的結構。其中如果欄位dev 1,則表示佇列中該項沒有被使用。欄位cmd可取常量read ...
linux 塊裝置驅動(二) 塊裝置資料結構
本文 於 1.塊裝置相關的資料結構以及介面 塊裝置介面則相對複雜,讀寫api沒有直接到塊裝置層,而是直接到檔案系統層,然後再由檔案系統層發起讀寫請求。一 block device block device結構代表了核心中的乙個塊裝置。它可以表示整個磁碟或乙個特定的分割槽。當這個結構代表乙個分割槽時,...