来自<linux/module.h>
:
#ifdef MODULE
#define MODULE_GENERIC_TABLE(gtype,name) \
extern const struct gtype##_id __mod_##gtype##_table \
__attribute__ ((unused, alias(__stringify(name))))
extern struct module __this_module;
#define THIS_MODULE (&__this_module)
#else /* !MODULE */
#define MODULE_GENERIC_TABLE(gtype,name)
#define THIS_MODULE ((struct module *)0)
#endif
我可以看到&#34; extern struct module __this_module;
&#34;只是__this_module
的声明,而不是__this_module
的定义。那么__this_module
的内存分配在哪里?我无法在kernel
代码中找到它。
答案 0 :(得分:5)
根据an obscure and dark spot in the LKML ...
这是否意味着模块结构(结构模块)和它的各种各样 ubstruct由insmod填写?
此致 那仁
On Sun,2000年11月5日,Tigran Aivazian写道:
On Sun,2000年11月5日,Naren Devaiah写道: &GT; &GT;
我查看了2.4.0-pre10源代码树,发现它定义为 extern struct module __this_module; 在module.h(以及其他文件中),但它实际定义在哪里?
它不是 - 它的神奇,当然:)。它的工作方式是insmod到 以&amp; __ this_module解决指向的方式安排事情 模块的地址空间的开头,恰好包含了&#struct; struct 模块&#39;在开始。
此致 蒂格兰
Follow-up ...
On Sun,2000年11月5日,Naren Devaiah写道:
这是否意味着模块结构(结构模块)和它的各种各样 子结构由insmod填充?
此致 那仁
是的,部分,即查看sys_create_module()和 sys_init_module()系统调用,它们在kernel / module.c中。
sys_create_module()只是分配空间并将模块链接到列表中,但是sys_init_module()传递了一个结构模块&#39;来自用户空间 其内容经过严格验证(不相信任何人!)然后安装到 一个真正的内核结构模块&#39;和模块的init_module()例程是 调用
此致 蒂格兰