我一直在尝试移植几个Linux驱动程序,并意识到有内核版本2.4和2.6的Linux之间的实质性区别。Linux内核模块中module_init和init_module有什么区别?
在2.4版内核,模块编程为如下 -
#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");
}
但是,随着2.6版本内核的,下面有模块做 -
#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);
内核2.6中这种变化的优点是什么?为什么Linux内核2.6中需要这种变化?
2.4声明意味着你永远无法将模块构建到系统中(因为声明不是静态的)。 – stsquad 2012-06-13 07:55:20
下面是一个非常好的解释module_init: http://stackoverflow.com/questions/18605653/linux-module-init-vs-core-initcall-vs-early-initcall – user2311046 2014-01-06 14:45:26