Si vous regardez la définition des nouvelles fonctions :
/* Each module must use one module_init(). */
#define module_init(initfn) \
static inline initcall_t __inittest(void) \
{ return initfn; } \
int init_module(void) __attribute__((alias(#initfn)));
/* This is only required if you want to be unloadable. */
#define module_exit(exitfn) \
static inline exitcall_t __exittest(void) \
{ return exitfn; } \
void cleanup_module(void) __attribute__((alias(#exitfn)));
Vous verrez qu'il garantit que le bon passe-partout est inclus afin que ces fonctions spéciales puissent être correctement traitées par le compilateur. C'est ce que fait l'API interne de Linux, elle évolue s'il existe de meilleures façons de résoudre le problème.
Quel est l'avantage de [module_init] dans le noyau 2.6
module_init
également quitté en 2.4, attention.
Il ajoute le passe-partout nécessaire pour initialiser le module et exécuter la fonction d'entrée lorsque le fichier du module est compilé dans le noyau plutôt qu'en tant que module.