MODULE_DESCRIPTION作为运行时生成的字符串

时间:2015-06-30 15:07:42

标签: linux module kernel

是否可以将Linux内核模块中的MODULE_DESCRIPTION设置为运行时生成的字符串,或者是否必须预先定义它,例如使用#define或" "

尝试将其设置为运行时生成的字符串时,我收到此错误:

 error: expected ‘,’ or ‘;’ before ‘desc’
 MODULE_DESCRIPTION(desc);
                    ^
include/linux/moduleparam.h:23:26: note: in definition of macro ‘__MODULE_INFO’
   = __stringify(tag) "=" info
                          ^
include/linux/module.h:133:42: note: in expansion of macro ‘MODULE_INFO’
 #define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
                                          ^
 note: in expansion of macro ‘MODULE_DESCRIPTION’
 MODULE_DESCRIPTION(desc);
 ^

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您查看moduleparam.h中的整个宏,则可获得以下内容:

#define __MODULE_INFO(tag, name, info)                                  \
static const char __UNIQUE_ID(name)[]                                   \
  __used __attribute__((section(".modinfo"), unused, aligned(1)))       \
  = __stringify(tag) "=" info

如果您拿出__attribute__内容,就会得到类似

的内容
#define __MODULE_INFO(tag, name, info)                                  \
static const char __UNIQUE_ID(name)[]                                   \
  = __stringify(tag) "=" info

注意,这一行__stringify(tag) "=" info正在创建一个单独的字符串,它依赖于C预处理器连接字符串的事实。

因此它不能是运行时生成的字符串,它必须是C预处理器可以解释和连接的东西。