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_trace需要用power_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\n", 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目錄,第二個參數NULL表示在sys目錄下。
#####################################################
sysfs_create_group(power_kobj, &attr_group);
//表示在sys/power/目錄下生成一系列節點,具體參考sysfs接口說明
kobject_uevent(&k->kobj, KOBJ_ADD);
待續。。。