Quelle est la différence entre module_init et init_module dans un module du noyau Linux?
J'ai essayé de port peu de pilotes pour linux et a réalisé qu'il existe une grande différence entre la version du noyau 2.4 et 2.6 de linux.
Dans la version 2.4 du noyau, le module de programmation est comme ci-dessous -
#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "Hi \n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Bye \n");
}
Mais, avec la version 2.6 du noyau, le suivant doit être fait pour les modules -
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int hi_init(void)
{
printk(KERN_ALERT "Hi \n");
return 0;
}
static void hi_exit(void)
{
printk(KERN_ALERT "Bye \n");
}
module_init(hi_init);
module_exit(hi_exit);
Quel est l'avantage de ces changements dans le Noyau 2.6 et Pourquoi était-ce le changement requis dans le noyau 2.6 de linux ?
Le 2.4 déclarations impliquent que vous ne pourrait jamais construire le module dans le système (comme les déclarations ne sont pas statiques).
Voici une très belle explication de module_init: stackoverflow.com/questions/18605653/...
Voici une très belle explication de module_init: stackoverflow.com/questions/18605653/...
OriginalL'auteur Karthik Balaguru | 2010-07-10
Vous devez vous connecter pour publier un commentaire.
Si vous regardez la définition de nouvelles fonctions:
Vous verrez qu'il garantit le droit standard est inclus afin que ces fonctions peuvent correctement traités par le compilateur. C'est ce que l'interne de l'API de Linux, il évolue s'il existe de meilleures façons de résoudre le problème.
La lisibilité, la cohérence de l'API, de l'application de la convention. En général, vous voulez faire de la chaudière de la plaque de bits de l'API de conformité dur à visser et laisser au développeur de se concentrer sur les vrais problèmes qu'ils doivent résoudre.
OriginalL'auteur stsquad
module_init
sorti en 2.4, vous l'esprit.Il ajoute la nécessaire réutilisable pour initialiser le module et exécutez la fonction d'entrée lorsque le fichier de module est compilé dans le noyau, plutôt que comme un module.
OriginalL'auteur user502515
Un avantage est la lisibilité. cdrom_init() instantanément vous dit que c'est le init() appel pour le pilote cd-rom.
OriginalL'auteur Bandan