linux内核驱动接口,Linux内核驱动接口(kset,kobj)

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);

待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值