【发布时间】:2013-04-26 06:07:47
【问题描述】:
在浏览内核代码时,我遇到了一个在多个内核初始化函数中使用的关键字__init_refok。
我遇到的一些线路就像
void __init_refok free_initmem(void)
static void __init_refok vgacon_scrollback_startup(void)
const struct linux_logo * __init_refok fb_find_logo(int depth)
void noinline __init_refok rest_init(void)
和其他人。
我搜索了参考,从那里我知道它被定义为include/linux/init.h第71行中的预处理器宏。
浏览后得到如下代码
#define __init_refok __ref
和
#define __ref __section(.ref.text) noinline
在那之后,我迷失了方向。
如果有人可以让我知道在代码中使用该关键字的目的是什么,那将非常有帮助。
[我正在寻找使用这个关键字实现的基本功能,就像使用__init有助于将初始化代码放在单独的内存位置以便在初始化过程完成后清除。]
提前致谢。
编辑
在include/linux/init.h 中,提到__init_refok 是为了抑制来自modpost 检查的警告,因为任何引用形式的正常代码都指向init 部分代码,但我仍然没有完全理解。这是否意味着这些代码将放在其他地方?通过使用 __init_refok 关键字,该行为与正常行为有何不同?
【问题讨论】:
标签: linux-kernel kernel keyword embedded-linux c-preprocessor