内核bus代码bus_attr_uevent的定义
最近看内核代码,在bus_attr_uevent这个函数的定义上难住了
查资料说是一个宏定义具体如下:
复制代码
但是看不懂..
bus_attr_##_name,中间两个“#”号是做什么用的?
查资料说是一个宏定义具体如下:
- #define __ATTR(_name,_mode,_show,_store) { \
- .attr = {.name = __stringify(_name), .mode = _mode }, \
- .show = _show, \
- .store = _store, \
- }
-
- #define BUS_ATTR(_name, _mode, _show, _store) \
- struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
- static BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store);
bus_attr_##_name,中间两个“#”号是做什么用的?
作者: ntqumeng 发布时间: 2011-02-18
##是连接
假设BUS_ATTR(a, b , c, d)
那么就被扩展成了
a_b = _ATTR(....)
假设BUS_ATTR(a, b , c, d)
那么就被扩展成了
a_b = _ATTR(....)
作者: amarant 发布时间: 2011-02-18
C 语言的基本功啊
作者: Godbach 发布时间: 2011-02-18
回复 amarant
是连接bus_attr_##_name的bus_attr_和_name这个两个部分吗?
那error = driver_create_file(drv, &driver_attr_uevent);中的driver_attr_uevent怎么理解呀..
定义的宏是BUS_ATTR,bus_attr_##_name只是替代部分
求教先谢过了
是连接bus_attr_##_name的bus_attr_和_name这个两个部分吗?
那error = driver_create_file(drv, &driver_attr_uevent);中的driver_attr_uevent怎么理解呀..
定义的宏是BUS_ATTR,bus_attr_##_name只是替代部分
求教先谢过了
作者: ntqumeng 发布时间: 2011-02-18
呵呵 这个是扩展的 第一次看到我也慌张了
作者: amarant 发布时间: 2011-02-18
回复 Godbach
惭愧,专业不是计算机,没有系统的学过C语言,最近正在补呢
惭愧,专业不是计算机,没有系统的学过C语言,最近正在补呢
作者: ntqumeng 发布时间: 2011-02-18
是连接bus_attr_##_name的bus_attr_和_name这个两个部分吗?
是的
那error = driver_create_file(drv, &driver_attr_uevent);中的driver_attr_uevent怎么理解呀..
driver_attr_uevent应该就是一个具体属性,你可以看看driver_create_file的源码
是的
那error = driver_create_file(drv, &driver_attr_uevent);中的driver_attr_uevent怎么理解呀..
driver_attr_uevent应该就是一个具体属性,你可以看看driver_create_file的源码
作者: amarant 发布时间: 2011-02-18
回复 amarant
看driver_create_file的定义
复制代码
感觉相当于替换成BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store)这个函数指针,但过程是怎么样的..想不明白
怎么都感觉反过来了
看driver_create_file的定义
- int driver_create_file(struct device_driver *drv,
- const struct driver_attribute *attr)
- {
- int error;
- if (drv)
- error = sysfs_create_file(&drv->p->kobj, &attr->attr);
- else
- error = -EINVAL;
- return error;
- }
怎么都感觉反过来了
作者: ntqumeng 发布时间: 2011-02-18
回复 ntqumeng
这个不是吧,那个宏只是初始化一个数据项,这个函数是在sysfs下生成相应的节点
这个不是吧,那个宏只是初始化一个数据项,这个函数是在sysfs下生成相应的节点
作者: amarant 发布时间: 2011-02-18