匯流排裝置模型 kobject

2021-06-18 10:03:52 字數 2354 閱讀 6144

原創kylin_zeng:

匯流排裝置驅動:

一、sysfs檔案系統:linux2.6核心引入sysfs檔案系統,sysfs可以看成與proc,devfs和devpty同類別的檔案系統,

該檔案系統是虛擬的檔案系統,可以更方便對系統裝置進行管理。它可以產生乙個包含所有系統硬體層次檢視,

與提供程序和狀態資訊的proc檔案系統十分類似。sysfs把連線在系統上的裝置和匯流排組織成為乙個分級的檔案,

它們可以由使用者空間訪問,向使用者空間匯出核心的資料結構以及它們的屬性。sysfs的乙個目的就是展示裝置驅動模型

中各元件的層次關係,其頂級目錄包括block,bus,drivers,class,power和firmware等.

~$ ls /sys  

//執行環境ubuntu8.04(2.6.16)

block bus class devices firmware fskernel module power slab

二、kobject:是乙個物件導向的管理機制,是構成裝置上述裝置模型的核心結構,在核心中註冊乙個

kobject就對應sysfs檔案系統中的乙個目錄和目錄裡的乙個檔案。

1)struct kobject;

2)註冊:

void kobject_init(struct kobject *kobj)//初始化kobject結構

int kobject_add(struct kobject *kobj) // 將kobject物件註冊到linux系統

或者: int kobject_init_and_add(structkobject *kobj,  

struct kobj_type *ktype,

struct kobject*parent, const char *fmt, ...)//初始化kobject,並將其註冊到linux系統

3)刪除及計數加減:

void kobject_del(struct kobject *kobj) //從linux系統中刪除kobject物件

struct kobject *kobject_get(structkobject *kobj)//將kobject物件的引用計數加1,同時返回該物件指標。

void kobject_put(struct kobject *kobj)//將kobject物件的引用計數減1,如果引用計數降為0,則呼叫release方法釋放該kobject物件。

4) kobj_type:

kobject的ktype成員是乙個指向kobj_type結構的指標該結構中記錄了kobject物件的一些屬性。

struct kobj_type

;//release:用於釋放kobject占用的資源,當kobject的引用計數為0時被呼叫。

5)attribute:就是目錄下的檔案。可以對應多個檔案。

struct attribute

;//struct attribute(屬性):對應於kobject的目錄下的乙個檔案,name成員就是檔名。

6)sysfs_ops :

struct sysfs_ops

;// show:當使用者讀屬性檔案時,該函式被呼叫,該函式將屬性值存入buffer中返回給使用者態;

// store:當使用者寫屬性檔案時,該函式被呼叫,用於儲存使用者傳入的屬性值。

三、 kset是具有相同型別的kobject的集合,在

sysfs中體現成乙個目錄,在核心中用kset數

據結構表示。

1)kset_register(struct kset *kset)  //在核心中註冊乙個kset

2)vkset_unregister(struct kset *kset)//從核心中登出乙個kset

機構體:

struct kset

因此kset包含kobject.上述的熱拔插是:在linux系統中,當系統配置發生變化時,如:

新增kset到系統;移動kobject, 乙個通知會

從核心空間傳送到使用者空間,這就是熱插拔事

件。熱插拔事件會導致使用者空間中相應的處

理程式(如udev,mdev)被呼叫, 這些處理程式

會通重載入驅動程式, 建立裝置節點等來響應

熱插拔事件。

1)struct kset_uevent_ops 

1.1)當該kset所管理的kobject和kset狀態發生變化時即熱插拔(如被加入,移動),上述三個函式將被呼叫。

1.2)這三個函式的功能:

filter:決定是否將事件傳遞到使用者空間。如果 filter返回 0,將不傳遞事件。(例: uevent_filter)

name:用於將字串傳遞給使用者空間的熱插拔處理程式。

uevent:將使用者空間需要的引數新增到環境變數中。    例:dev_uevent)

linux裝置模型之kobject

kobject 結構 在linux核心裡,kobject是組成linux裝置模型的基礎,乙個kobject對應sysfs裡的 乙個目錄。從物件導向的角度來說,kobject可以看作是所有裝置物件的基類,因為c 語言並沒有物件導向的語法,所以一般是把kobject內嵌到其他結構體裡來實現類似的 作用,...

裝置驅動模型 kobject示例及其除錯

include include include include include include include void kobject test release struct kobject kobject ssize t kobject test show struct kobject kobj...

匯流排 裝置 驅動模型

裝置元素 匯流排,驅動,裝置 匯流排 處理器和裝置之間的通道,在裝置模型中,所有的裝置都通過匯流排相連,甚至是內部的虛擬 platform 匯流排 定時器,看門狗並沒有直接相連 在linux裝置模型中,匯流排由bus type結構表示,定義在 匯流排的註冊使用 bus register struct...