在浏览内核代码时,我遇到了一个在几个内核初始化函数中使用的关键字,__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
help 将初始化代码放在单独的内存位置以便在 init 进程完成后清除一样。]
提前致谢。
编辑
在 中include/linux/init.h
,提到__init_refok
抑制来自 modpost 检查的警告,因为任何参考形式的正常代码到 init 部分代码,但我仍然没有完全理解。这是否意味着这些代码将放在其他地方?__init_refok
通过使用关键字,行为与正常行为有何不同?