【问题标题】:Where is the memory allocation of "__this_module" variable?“__this_module”变量的内存分配在哪里?
【发布时间】:2016-02-07 02:51:07
【问题描述】:

来自<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

我可以看到“extern struct module __this_module;”只是__this_module 的声明,而不是__this_module 的定义。那么__this_module的内存分配在哪里呢?我在kernel 代码中找不到它。

【问题讨论】:

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


    【解决方案1】:

    根据an obscure and dark spot in the LKML...

    这是否意味着模块结构(struct module)和它的各种 ubstructures都是insmod填的吗?

    问候, 娜仁

    2000 年 11 月 5 日星期日,Tigran Aivazian 写道:

    2000 年 11 月 5 日,星期日,Naren Devaiah 写道: > >

    我查看了 2.4.0-pre10 源代码树,发现它定义为 外部结构模块 __this_module; 在 module.h 中(在其他文件中),但它实际定义在哪里?

    它不是——它是魔法,当然 :)。它的工作方式是让 insmod 以 &__this_module 解析指向的方式安排事物 模块地址空间的开头,恰好包含 'struct 模块”开头。

    问候, 蒂格兰

    Follow-up...

    在 2000 年 11 月 5 日星期日,Naren Devaiah 写道:

    这是否意味着模块结构(struct module)和它的各种 子结构由insmod填充?

    问候, 娜仁

    是的,部分,即看看 sys_create_module() 和 sys_init_module() 系统调用,它们在 kernel/module.c 中

    sys_create_module() 只是分配空间并将模块链接到列表中,但 sys_init_module() 从用户空间传递了一个“结构模块” 其内容经过严格验证(不要相信任何人!),然后安装到 一个真正的内核“结构模块”和模块的 init_module() 例程是 调用。

    问候, 蒂格兰

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 2017-02-28
      • 2017-05-14
      • 2011-07-20
      • 1970-01-01
      • 2013-11-06
      相关资源
      最近更新 更多