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)0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值