DRIVER_ATTR and DEVICE_ATTR

来源:互联网 发布:windows 10 下载 编辑:程序博客网 时间:2024/06/05 02:58
Driver Attributes
~~~~~~~~~~~~~~~~~
struct driver_attribute {        struct attribute        attr;        ssize_t (*show)(struct device_driver *driver, char *buf);        ssize_t (*store)(struct device_driver *, const char * buf, size_t count);};

Device drivers can export attributes via their sysfs directories.
Drivers can declare attributes using a DRIVER_ATTR macro that works
identically to the DEVICE_ATTR macro.

Example:

DRIVER_ATTR(debug,0644,show_debug,store_debug);

This is equivalent to declaring:

struct driver_attribute driver_attr_debug;

This can then be used to add and remove the attribute from the
driver's directory using:

int driver_create_file(struct device_driver *, const struct driver_attribute *);
void driver_remove_file(struct device_driver *, const struct driver_attribute *);


Device Attributes
~~~~~~~~~~~~~~~~~
struct device_attribute {    struct attribute    attr;    ssize_t (*show)(struct device *dev, struct device_attribute *attr,            char *buf);    ssize_t (*store)(struct device *dev, struct device_attribute *attr,             const char *buf, size_t count);};

Attributes of devices can be exported via drivers using a simple
procfs-like interface.

Please see Documentation/filesystems/sysfs.txt for more information
on how sysfs works.

Attributes are declared using a macro called DEVICE_ATTR:

#define DEVICE_ATTR(name,mode,show,store)

Example:

DEVICE_ATTR(power,0644,show_power,store_power);

This declares a structure of type struct device_attribute named
'dev_attr_power'. This can then be added and removed to the device's
directory using:

int device_create_file(struct device *device, struct device_attribute * entry);
void device_remove_file(struct device * dev, struct device_attribute * attr);

Example:

device_create_file(dev,&dev_attr_power);
device_remove_file(dev,&dev_attr_power);

The file name will be 'power' with a mode of 0644 (-rw-r--r--).
0 0
原创粉丝点击