Ich habe versucht, einige Linux-Treiber zu portieren und erkannte, dass es einen wesentlichen Unterschied zwischen Kernel-Version 2.4 und 2.6 von Linux gibt.Was ist der Unterschied zwischen module_init und init_module in einem Linux-Kernel-Modul?
In der 2.4 Version des Kernels, die Modulprogrammierung, wie unten war -
#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");
}
Aber mit der Version 2.6 des Kernels, hat die folgenden für Module durchgeführt werden -
#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);
Was ist der Vorteil solcher Änderungen in Kernel 2.6 und warum wurde diese Änderung in Kernel 2.6 von Linux benötigt?
Die 2.4 Deklarationen implizieren, dass Sie das Modul niemals in das System einbauen können (da die Deklarationen nicht statisch sind). – stsquad
Hier ist eine sehr schöne Erklärung zu module_init: http://stackoverflow.com/questions/18605653/linux-module-init-vs-core-initcall-vs-e-arly-initcall – user2311046