我一直在尝试移植一些 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);
在内核 2.6 中进行此类更改的优势是什么?为什么在 linux 的内核 2.6 中需要进行更改?