sysfs attr

1. dev->kobj 下面创建属性


方法一:

static inline int __must_check sysfs_create_file(struct kobject *kobj, const struct attribute *attr)


方法二:

就是方法一的封装

int device_create_file(struct device *dev,
               const struct device_attribute *attr)
{
    int error = 0;

    if (dev) {

        error = sysfs_create_file(&dev->kobj, &attr->attr);
    }

    return error;
}

2. dev->kobj下面创建属性组


方法一:

int sysfs_create_files(struct kobject *kobj, const struct attribute **ptr)
{
    int err = 0;
    int i;

    for (i = 0; ptr[i] && !err; i++)
        err = sysfs_create_file(kobj, ptr[i]);
    if (err)
        while (--i >= 0)
            sysfs_remove_file(kobj, ptr[i]);
    return err;
}

方法二


int sysfs_create_group(struct kobject *kobj, const struct attribute_group *grp)

3.demo



static struct class *my_class = NULL;
static dev_t my_devno;
struct device *mysys_dev = NULL;
static int my_flag=0;

static ssize_t xxx_read(struct device *dev, struct device_attribute *attr, char *buf)
{
    int ret = 0;
    sprintf(buf, "%d\n",my_flag);
    ret = strlen(buf) + 1;
    printk(" %s my_flag=%d\n",__func__,ret);
    return ret;
}
static ssize_t xxx_write(struct device *dev, struct device_attribute *attr, const char *buf, size_t size)
{
    my_flag = simple_strtoul(buf, NULL, 10);
    return size;
}

static DEVICE_ATTR(xxx, 0664 , xxx_read, xxx_write);


static int __init mycreat_sys_attr(void)
{
    if( alloc_chrdev_region(&my_devno, 0, 1,"mysys") )
    {
        return -EAGAIN;
    }
    my_class = class_create(THIS_MODULE, "mysys");
    mysys_dev = device_create(my_class, NULL, my_devno, NULL, "mysys_dev");
    if(NULL == mysys_dev)
    {
        return -EIO;
    }
    err = device_create_file(mysys_dev, &dev_attr_xxx);
}

module_init(mycreat_sys_attr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值