我一直在尝试移植一些Linux驱动程序,意识到Linux的内核版本2.4和2.6之间存在重大差异。
在内核版本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);
Kernel 2.6中这些变化的好处是什么,为什么在Linux的内核2.6中需要这种变化?