#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
1、创建单个属性文件
DEVICE_ATTR(mipi_read, S_IRUGO | S_IWUSR, mipi_read_show, mipi_read_store);
device_create_file(dev, &dev_attr_mipi_read);或者sysfs_create_file(&dev->kobj, &attr->attr);
其中device_create_file()函数代码如下,只是检查了读写函数是否存在,然后直接调用sysfs_create_file()函数。
int device_create_file(struct device *dev,const struct device_attribute *attr)
{
int error = 0;
if (dev) {
WARN(((attr->attr.mode & S_IWUGO) && !attr->store),
"Attribute %s: write permission without 'store'\n", attr->attr.name);
WARN(((attr->attr.mode & S_IRUGO) && !attr->show),
"Attribute %s: read permission without 'show'\n", attr->attr.name);
error = sysfs_create_file(&dev->kobj, &attr->attr);
}
return error;
}
void device_remove_file(struct device *dev, const struct device_attribute *attr)
{
if (dev)
sysfs_remove_file(&dev->kobj, &attr->attr);
}
2、创建多个属性文件
DEVICE_ATTR(disp_connect, S_IWUGO | S_IRUGO, show_connect, store_connect);
DEVICE_ATTR(gamma, S_IWUGO | S_IRUGO, show_gamma, store_gamma);
DEVICE_ATTR(polling, S_IWUGO | S_IRUGO, show_polling, store_polling);
/* attr group */
static struct attribute *attr_list[] = {
&dev_attr_disp_connect.attr,
&dev_attr_gamma.attr,
&dev_attr_polling.attr,
NULL
};
static struct attribute_group display_attr_group = {
.attrs = attr_list,
};
sysfs_create_group(&pdev->dev.kobj, &display_attr_group);