" __ this_module"的内存分配在哪里?变量?

时间:2015-11-06 02:47:57

标签: c linux linux-kernel linux-device-driver

来自<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代码中找到它。

1 个答案:

答案 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()例程是   调用

     

此致   蒂格兰