sysfs_create_group使用

include/linux/sysfs.h中对attribute和attribute_group结构体的定义:
struct attribute {
    const char        *name;
    umode_t            mode;
#ifdef CONFIG_DEBUG_LOCK_ALLOC
    bool            ignore_lockdep:1;
    struct lock_class_key    *key;
    struct lock_class_key    skey;
#endif

};

struct attribute_group {
    const char        *name;
    umode_t            (*is_visible)(struct kobject *,
                          struct attribute *, int);
    struct attribute    **attrs;
};
sysfs_create_group和sysfs_remove_group定义在fs/sysfs/group.c中,声明在include/linux/sysfs.h中,sysfs_create_group返回0代表创建成功。

int sysfs_create_group(struct kobject *kobj,
               const struct attribute_group *grp)
{
    return internal_create_group(kobj, 0, grp);
}

void sysfs_remove_group(struct kobject * kobj,
            const struct attribute_group * grp)
{
    struct sysfs_dirent *dir_sd = kobj->sd;
    struct sysfs_dirent *sd;

    if (grp->name) {
        sd = sysfs_get_dirent(dir_sd, NULL, grp->name);
        if (!sd) {
            WARN(!sd, KERN_WARNING "sysfs group %p not found for "
                "kobject '%s'\n", grp, kobject_name(kobj));
            return;
        }
    } else
        sd = sysfs_get(dir_sd);

    remove_files(sd, kobj, grp);
    if (grp->name)
        sysfs_remove_subdir(sd);

    sysfs_put(sd);
}

sysfs_create_group的使用:
1.定义

static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR | S_IWGRP | S_IWOTH,
           kionix_accel_get_enable, kionix_accel_set_enable);
static DEVICE_ATTR(poll_delay, S_IRUGO | S_IWUSR | S_IWGRP | S_IWOTH,
           kionix_accel_get_delay, kionix_accel_set_delay);
static DEVICE_ATTR(direct, S_IRUGO | S_IWUSR | S_IWGRP | S_IWOTH,
           kionix_accel_get_direct, kionix_accel_set_direct);
static DEVICE_ATTR(data, S_IRUGO, kionix_accel_get_data, NULL);
static DEVICE_ATTR(cali, S_IRUGO | S_IWUSR | S_IWGRP | S_IWOTH,
           kionix_accel_get_cali, kionix_accel_set_cali);
2.创建接口
static struct attribute *kionix_accel_attributes[] = {
    &dev_attr_enable.attr,
    &dev_attr_poll_delay.attr,
    &dev_attr_direct.attr,
    &dev_attr_data.attr,
    &dev_attr_cali.attr,
    NULL
};
3.封装
static struct attribute_group kionix_accel_attribute_group = {
    .attrs = kionix_accel_attributes,
};
4.调用
sysfs_create_group(&acceld->input_dev->dev.kobj, &kionix_accel_attribute_group);
在文件系统下面会生成相应的节点:
root@msm8909:/ # cd /sys/class/input/input5
root@msm8909:/sys/class/input/input5 # ls
cali
capabilities
data
direct
enable

event4
id
modalias
name
phys
poll_delay
power
properties
subsystem
uevent
uniq

5.删除
sysfs_remove_group(&acceld->input_dev->dev.kobj, &kionix_accel_attribute_group);

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值