DEVICE_ATTR

#define DEVICE_ATTR(_name, _mode, _show, _store)    \

struct device_attribute dev_attr_##_name = _ATTR(_name, _mode, _show, _stroe);

宏DEVICE_ATTR内封装的是_ATTR(_name, _mode, _show, _store)方法。

_name :名字

_mode :权限

_show :读方法

_store :写方法

当然,DEVICE_ATTR不是独生子女,它还有一系列的姊妹:

对设备使用   DEVICE_ATTR

对驱动使用   DRIVER_ATTR

对总线使用   BUS_ATTR

对类别(class)使用   CLASS_ATTR

这四个宏来自于#include <linux/device.h>.

假设有如下声明;

static DEVICE_ATTR(foo, S_IWUSR | S_IRUGO, show_foo, store_foo);

等同于这样的代码:

static struct device_attribute dev_attr_foo = {

   .attr = {

      .name = "foo",

      .mode  = S_IWUSR | S_IRUGO,

    },

   .show = show_foo,

   .store = store_foo,

};

我们来看看怎样使用DEVICE_ATTR:

static ssize_t show_name(struct device *dev, struct device_attribute *atttr, char *buf)

{

   return snprintf(buf, PAGE_SIZE, "%s\n", dev->name);

}

static ssize_t store_name(struct device *dev, const char *buf)

{

   sscanf(buf, "%20s", dev->name);

}

static DEVICE_ATTR(name, S_IRUGO, show_name, store_name);

(注意:真实的程序不允许用户空间设置设备名。)

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值