2015-11-06 73 views
5

<linux/module.h>「__this_module」變量的內存分配在哪裏?

#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的代碼中找到它。

回答

4

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

這是否意味着模塊結構(結構模塊)和它的各種 ubstructures由insmod的填寫?

問候, 那仁

在Sun,5 2000月,季格蘭Aivazian寫道:

在Sun,5 2000十一月,那仁Devaiah寫道: > >

我看着在2.4.0-pre10源代碼樹,發現它定義爲 的extern結構模塊__this_module; 在module.h中(除了其他文件),但它在哪裏實際定義?

它不是 - 它的魔力,當然:)。它的工作方式是對insmod到 進行排列,以便& __this_module解析爲指向 模塊的地址空間的開始,這恰好在開始時包含'struct 模塊'。

問候, 狄格蘭

Follow-up ...

在Sun,5月2000,那仁Devaiah寫道:

這是否意味着模塊結構(結構模塊)和它的各種 子是由insmod的填寫?

的問候,那仁

是,部分,即看看sys_create_module()和 sys_init_module()系統調用,他們是在內核/的module.c

sys_create_module()只分配的空間和模塊連接到列表中,但sys_init_module()從用戶空間 其內容苛刻驗證(不相信任何人!)通過了「結構模塊」,然後安裝到 一個真正的內核「結構模塊」和模塊的init_module ()例程是 被調用。

問候, 狄格蘭