原創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...