日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

(Linux 2.6设备管理机制)kobject和kset

發布時間:2024/9/21 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (Linux 2.6设备管理机制)kobject和kset 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux 2.6內核的一個重要特色是提供了統一的內核設備模型。Linux 2.6內核引入的新的設備管理機制的最高層抽象為kobject,通過這個數據結構使所有設備在底層都具有統一的接口。kobject結構主要提供三方面的功能:引用計數、sysfs表示以及熱插拔等事件支持。kobject與sysfs文件系統緊密關聯,每個在內核中注冊的kobject對象都對應于sysfs文件系統中的一個目錄。kobject結構定義如下:

  • struct?kobject?{ ?
  • ????const?char??????*name;?//名稱 ?
  • ????struct?list_head????entry;?//同類kobjects的鏈表 ?
  • ????struct?kobject??????*parent;?//?父對象 ?
  • ????struct?kset?????*kset;?//?所屬的集合 ?
  • ????struct?kobj_type????*ktype;?//?對象的類型 ?
  • ????struct?sysfs_dirent?*sd;?//?在sysfs?中的目錄項 ?
  • ????struct?kref?????kref;?//?計數 ?
  • ????unsigned?int?state_initialized:1; ?
  • ????unsigned?int?state_in_sysfs:1; ?
  • ????unsigned?int?state_add_uevent_sent:1; ?
  • ????unsigned?int?state_remove_uevent_sent:1; ?
  • ????unsigned?int?uevent_suppress:1; ?
  • }; ?
  • kobj_type表示對象的類型:

  • struct?attribute?{ ?
  • ????const?char??*name; ?
  • ????struct?module???*owner; ?
  • ????mode_t??mode; ?
  • }; ?
  • struct?kobj_type?{ ?
  • ????void?(*release)(struct?kobject?*kobj); ?
  • ????struct?sysfs_ops?*sysfs_ops;//sysfs操作接口 ?
  • ????struct?attribute?**default_attrs;//屬性 ?
  • }; ?
  • kobject對象的接口函數如下:
  • void?kobject_init(struct?kobject?*kobj,?struct?kobj_type?*ktype); ?
  • int?kobject_add(struct?kobject?*kobj,struct?kobject?*parent,const?char?*fmt,?...); ?
  • void?kobject_del(struct?kobject?*);? ?
  • struct?kobject?*?kobject_create(void); ?
  • struct?kobject?*kobject_get(struct?kobject?*kobj); ?
  • void?kobject_put(struct?kobject?*?kobj);//減少使用計數 ?
  • kobject通常通過kset組織成層次化的結構,kset是具有相同類型的kobject的集合。所有屬于同一個ksets的對象(kobject)的parent都指向該ksets的kobj成員。
  • struct?kset?{ ?
  • ????struct?list_head?list;?//同一kset的鏈表 ?
  • ????spinlock_t?list_lock;//鎖 ?
  • ????struct?kobject?kobj;?//自身的kobject ?
  • ????struct?kset_uevent_ops?*uevent_ops;//?uevent操作,如熱插拔事件 ?
  • }; ?
  • ksets對象的接口函數如下:
  • void?kset_init(struct?kset?*?k); ?
  • struct?kset?*?kset_create_and_add(const?char?*name,struct?kset_uevent_ops?*u, ?
  • ????????????????????????struct?kobject?*parent_kobj); ?
  • int?kset_register(struct?kset?*kset); ?
  • void?kset_unregister(struct?kset?*kset); ?
  • 總結

    以上是生活随笔為你收集整理的(Linux 2.6设备管理机制)kobject和kset的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。