Ho cercato di portare alcuni driver linux e mi sono reso conto che c'è una sostanziale differenza tra la versione 2.4 e 2.6 di Linux.Qual è la differenza tra module_init e init_module in un modulo del kernel Linux?
Nella versione 2.4 del kernel, la programmazione del modulo è stato, come di seguito -
#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");
}
Ma, con la versione 2.6 del kernel, il seguente deve essere fatto per i moduli -
#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);
Qual è il vantaggio di tali cambiamenti nel kernel 2.6 e perché è stata necessaria tale modifica nel kernel 2.6 di linux?
Le dichiarazioni 2.4 implicano che non è mai possibile creare il modulo nel sistema (poiché le dichiarazioni non sono statiche). – stsquad
Ecco una spiegazione molto buona a module_init: http://stackoverflow.com/questions/18605653/linux-module-init-vs-core-initcall-vs-early-initcall – user2311046