歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux設備驅動模型之總線

Linux設備驅動模型之總線

宏BUS_ATTR

在創建屬於總線的設備屬性的函數bus_creat_file。其形式如下:

int bus_create_file(struct bus_type *bus, struct bus_attribute *attr)
{
 int error;
 if (bus_get(bus)) {
  error = sysfs_create_file(&bus->p->subsys.kobj, &attr->attr);
  bus_put(bus);
 } else
  error = -EINVAL;
 return error;
}
EXPORT_SYMBOL_GPL(bus_create_file);
  實際使用該函數時,經典用法:
static BUS_ATTR(version, S_IRUGO, show_bus_version,NULL)

if (bus_create_file(&ldd_bus_type, &bus_attr_version))
printk(KERN_NOTICE "Unable to create version attribute\n");
該函數失敗時返回錯誤號。一旦調用該函數,會就在指定bus總線的目錄下新建一個名叫_name的文件,權限為_mode,當訪問和修改該文件是會分別調用show和store函數調用。上面的&bus_attr_version就是在上一句中static BUS_ATTR(version, S_IRUGO, show_bus_version,NULL)定義的。
具體為:宏BUS_ATTR

這個宏BUS_ATTR類似於Uboot裡面的定義命令的宏U_BOOT_CMD。
在設備中也有類似的宏DEVICE_ATTR,分析也類似。

#define BUS_ATTR(_name, _mode, _show, _store) \
struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
 
#define __ATTR(_name,_mode,_show,_store) { \
 .attr = {.name = __stringify(_name), .mode = _mode }, \
 .show = _show,    \
 .store = _store,    \
}#define __stringify_1(x) #x
#define __stringify(x)  __stringify_1(x)

Copyright © Linux教程網 All Rights Reserved