2015-11-06 10 views
5

Da <linux/module.h>:Dov'è l'allocazione di memoria della variabile "__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 

I Can See "extern struct module __this_module;" è solo una dichiarazione di __this_module, ma non definizione di __this_module. Allora, dov'è l'allocazione di memoria di __this_module? Non riesco a trovarlo nel codice kernel.

risposta

4

Secondo an obscure and dark spot in the LKML ...

Questo significa che la struttura del modulo (modulo struct) ed è vari ubstructures sono riempiti da insmod?

saluti, Naren

il Dom, 5 Nov 2000, Tigran Aivazian ha scritto:

il Dom, 5 Nov 2000, Naren Devaiah ha scritto: > >

Ho esaminato l'albero dei sorgenti 2.4.0-pre10 e l'ho trovato definito come modulo struct extern __this_module; in module.h (tra gli altri file), ma dove viene effettivamente definito?

non è - è magico, ovviamente :). Il modo in cui funziona è che insmod a __questo_modulo risolva in modo che punti a l'inizio dello spazio indirizzo del modulo, che capita di contenere 'struct module' all'inizio.

saluti, Tigran

Follow-up ...

il Dom, 5 Nov 2000, Naren Devaiah ha scritto:

Questo significa che la struttura del modulo (modulo struct) e le varie sottostrutture sono compilate da insmod?

saluti, Naren

Sì, in parte, vale a dire hanno uno sguardo al sys_create_module() e sys_init_module() chiamate di sistema, sono in kernel/module.c

sys_create_module() solo assegna lo spazio e collega il modulo alla lista ma sys_init_module() viene passato un 'struct module' dallo spazio utente il cui contenuto è validamente validato (non fidarsi di nessuno!) e poi installato in un vero modulo 'struct' del kernel e modulo init_module del modulo() la routine è invocato.

saluti, Tigran

Problemi correlati