Linux裝置模型基礎 資料結構

2021-06-02 23:23:43 字數 3050 閱讀 8425

structkobject

;

屬性相關的成員變數

@name:名稱

@kref:

引用計數,用於統計系統中引用該物件的次數。

? structkref

;

看似多此一舉,實際上是為了防止使用者直接操作refcount。用struct kref進行封裝後,使用者須通過固定的介面來操作。如 ?

voidkref_set(structkref *kref,intnum);

voidkref_init(structkref *kref);

voidkref_get(structkref *kref);

intkref_put(structkref *kref,void(*release) (structkref *kref));

@ktype:?

structkobj_type

;

@release:

當kobject

的引用計數減為

0時,該指標指向的函式將被呼叫,進行

kobject

的釋放處理。

@default_attrs:該

kobject

所具有的屬性值,這些屬性值通過

sysfs

檔案系統到處到使用者空間,使用者也可

對這些值進行賦值。 ?

structattribute ;

@name:

屬性名@mode: 屬性模式

其餘兩個屬性僅在核心啟動了對鎖除錯的支援時才有用。

@sysfs_ops:

該結構包括兩個函式指標,其中

show

指向的函式用於向使用者匯出屬性值,而

store

在使用者對屬性進行賦值時被呼叫。 ?

structsysfs_ops ;

其餘變數用於命名空間的支援,此處忽略。

組織結構相關的成員變數

@kset:

本kobject所屬的kset。

kset是用於組織屬於某種特定型別的kobject物件集合,這裡的型別指的是對於某些時間具有某種相同

操作的意思。 ?

structkset ;

@list: 用於組織本kset內的kobject物件。

@list_lock: 自旋鎖,在遍歷本set中的kobject物件時實現互斥操作。

@kobj: kset作為乙個核心物件,其本身也作為kobject的乙個例項。

@uevent_ops: uevent事件的響應函式。 ?

structkset_uevent_ops ;

@filter: 過濾掉不感興趣的uevent事件

@name: 獲取subsystem環境變數

@uevent: uevent事件傳送函式。

@entry:

屬於同乙個kset的kobject物件會組織成雙向鍊錶形式,entry為相應的鏈結元素。 ?

structlist_head

;

@parent: kobject除了根據其所屬的kset進行組織以外,同時會按照父子關係組織成樹形

結構,而parent則指向其父節點。

sysfs檔案系統相關的成員變數

@sysfs_dirent:

在sysfs檔案系統中對應的節點,該節點可能為乙個目錄、鏈結等。 ?

structsysfs_dirent ;

unsignedints_flags;

unsignedshorts_mode;

ino_t s_ino;

structsysfs_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結構代表了核心中的乙個塊裝置。它可以表示整個磁碟或乙個特定的分割槽。當這個結構代表乙個分割槽時,...