Linuxカーネル駆動インタフェース(kset,kobj)

2874 ワード

struct kobject *power_kobj;

static struct attribute * g[] = {
    &state_attr.attr,
#ifdef CONFIG_PM_TRACE
    &pm_trace_attr.attr,
#endif
#ifdef CONFIG_PM_SLEEP
    &pm_async_attr.attr,
#ifdef CONFIG_PM_DEBUG
    &pm_test_attr.attr,
#endif
#endif
    NULL,
};
static struct attribute_group attr_group = {
    .attrs = g,
};

上のpm_トレースはパワーが必要だattr(pm_async);このように定義すると、以下はpowerを通じてです.attr()定義の方法
#define power_attr(_name) \
static struct kobj_attribute _name##_attr = { \
    .attr   = {             \
        .name = __stringify(_name), \
        .mode = 0644,           \
    },                  \
    .show   = _name##_show, \
    .store  = _name##_store, \
}

static ssize_t pm_async_show(struct kobject *kobj, struct kobj_attribute *attr,
                 char *buf)
{
    return sprintf(buf, "%d
"
, pm_async_enabled); } static ssize_t pm_async_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t n) { } sysfs_create_group(power_kobj, &attr_group); power_kobj = kobject_create_and_add("power", NULL); if (!power_kobj) return -ENOMEM; error = sysfs_create_group(power_kobj, &attr_group);

そうするとsys/powerの下にpm_が現れますasyncとその他.そしてcat/sys/power/pm_asyncだとpm_が呼び出されますasync_show()は、中に書くとpm_を呼び出しますasync_store()
kobject_create_and_add(“power”, NULL); //これはsys/powerディレクトリの作成を示し、2番目のパラメータNULLはsysディレクトリの下に表示されます.
##################################################### sysfs_create_group(power_kobj, &attr_group); //sys/power/ディレクトリの下で一連のノードを生成することを示します.sysfsインタフェースの説明を参照してください.
kobject_uevent(&k->kobj, KOBJ_ADD);
続きます...