MODULE_DESCRIPTION 作为运行时生成的字符串
MODULE_DESCRIPTION as runtime generated string
是否可以将 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);
^
谢谢!
如果您查看 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 预处理器可以解释和连接的字符串。
是否可以将 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);
^
谢谢!
如果您查看 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 预处理器可以解释和连接的字符串。