如何使用变量名创建/ sys属性

时间:2016-10-08 11:57:20

标签: c linux-kernel linux-device-driver

是否可以使用变量名在/ sys下创建属性文件? 例如:

char *variable_name = foo;
/* Create an attribute file foo */
struct kobj_attribute test = __ATTR(variable_name,0660,_show,_store);

3 个答案:

答案 0 :(得分:0)

我不是真的进入内核开发。但是:如果你这样做:

find /sys -type f -name '*1*'

你应该找到一些例子,其他代码正在做你正在寻找的东西。所以,我只是抓住那些作为例子,看看,他们是如何做到的。一个例子可能是机器检查异常代码:

[...]
/sys/devices/system/machinecheck/machinecheck0/bank1
/sys/devices/system/machinecheck/machinecheck1/bank1
/sys/devices/system/machinecheck/machinecheck2/bank1
/sys/devices/system/machinecheck/machinecheck3/bank1
/sys/devices/system/machinecheck/machinecheck4/bank1
/sys/devices/system/machinecheck/machinecheck5/bank1
[...]
$ ls /sys/devices/system/machinecheck/machinecheck0/bank*
/sys/devices/system/machinecheck/machinecheck0/bank0
/sys/devices/system/machinecheck/machinecheck0/bank1
/sys/devices/system/machinecheck/machinecheck0/bank2
/sys/devices/system/machinecheck/machinecheck0/bank3
/sys/devices/system/machinecheck/machinecheck0/bank4
/sys/devices/system/machinecheck/machinecheck0/bank5
/sys/devices/system/machinecheck/machinecheck0/bank6

在任何情况下,似乎你必须为此重新实现__ATTR宏(即自己初始化kobj_attribute结构)。

答案 1 :(得分:0)

宏__ATTR make stringify你的变量。 看sysfs.h

__stringify宏是:

#define __stringify_1(x...)     #x
#define __stringify(x...)       __stringify_1(x)

答案 2 :(得分:0)

请参阅Linux内核树下的samples / kobject / kobject-example.c,了解如何在/ sys

下创建属性文件的示例