sysfs探索 store和show的介面

2021-07-31 08:06:36 字數 2224 閱讀 3015

簡單分析:

1 本樣例主要測試kobject結構,kobject對應sysfs檔案系統中的乙個目錄,該目錄對應乙個具體的事物。

2 首先通過example_kobj = kobject_create_and_add("kobject_example", kernel_kobj);將該結構加入 

到/sys/kernel目錄下[kernel_kobj為kernel子系統的kobject結構],形成層次結構,並且在父目錄下建立該子目錄 [kobject->sd指向該kobject所在的目錄節點]。

3 通過retval = sysfs_create_group(example_kobj, &attr_group)將事物的3個特色屬性與其對應的kobject繫結起來,將該檔案操作介面和sysfs系統結合起來。使得可以通過 kobj_attribute中的show何store進行實際的核心讀寫操作,該函式實際上在父目錄下新建3個檔案,結構用sysfs_dirent表 示。且sysfs_dirent->s_attr.attr=相應屬性結構,據此可獲得讀寫該檔案的方法。

4 每個struct attribute結構對應kobject目錄下乙個檔案,檔案的讀寫方法由kobj_attribute中的show和store指定,kobj_attribute是kobject屬性匯出的介面

struct attribute

struct kobj_attribute

5當使用結束時,呼叫kobject_put(example_kobj)刪除該kobject結構,及其對應的目錄和檔案。

擴充套件:實際上對於不同子系統有不同的屬性和屬性操作函式

比如:在genhd.h檔案中,磁碟屬性操作結構為,disk_attribute是磁碟屬性匯出的介面:

struct disk_attribute

在device.h檔案中,外設屬性操作結構為,device_attribute是外設屬性匯出的介面:

struct device_attribute

源**如下:

#include

#include

#include

#include

#include

static int foo;

static int baz;

static int bar;

static ssize_t foo_show(struct kobject *kobj, struct kobj_attribute *attr,

char *buf)

static ssize_t foo_store(struct kobject *kobj, struct kobj_attribute *attr,

const char *buf, size_t count)

static struct kobj_attribute foo_attribute =

__attr(foo, 0666, foo_show, foo_store);

static ssize_t b_show(struct kobject *kobj, struct kobj_attribute *attr,

char *buf)

static ssize_t b_store(struct kobject *kobj, struct kobj_attribute *attr,

const char *buf, size_t count)

static struct kobj_attribute baz_attribute =

__attr(baz, 0666, b_show, b_store);

static struct kobj_attribute bar_attribute =

__attr(bar, 0666, b_show, b_store);

static struct attribute *attrs = ;

static struct attribute_group attr_group = ;

static struct kobject *example_kobj;

static int __init example_init(void)

static void __exit example_exit(void)

module_init(example_init);

module_exit(example_exit);

module_license("gpl");

module_author("greg kroah-hartman ");

USB和sysfs檔案系統

由於單個usb物理裝置的複雜性,裝置在sysfs中的表示也非常複雜。無論是物理usb裝置 用struct usb device 表示 還是單獨的usb介面 用struct usb inte ce 表示 在sysfs中均表示為單獨的裝置 這是因為這2個結構都包含乙個struct device結構 例如...

USB和sysfs檔案系統

2007年08月31日 星期五 19 32 由於單個usb物理裝置的複雜性,裝置在sysfs中的表示也非常複雜。無論是物理usb裝置 用struct usb device表示 還是單獨的usb介面 用struct usb inte ce表示 在sysfs中均表示為單獨的裝置 這是因為這2個結構都包含...

USB和sysfs檔案系統

2007年08月31日 星期五 19 32 由於單個usb物理裝置的複雜性,裝置在sysfs中的表示也非常複雜。無論是物理usb裝置 用struct usb device表示 還是單獨的usb介面 用struct usb inte ce表示 在sysfs中均表示為單獨的裝置 這是因為這2個結構都包含...