相关疑难解决方法(0)

Linux内核模块中module_init和init_module有什么区别?

我一直试图移植一些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"); 
}
Run Code Online (Sandbox Code Playgroud)

但是,对于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);
Run Code Online (Sandbox Code Playgroud)

Kernel 2.6中这种更改的优点是什么?为什么Linux内核2.6需要进行更改?

linux operating-system kernel linux-device-driver linux-kernel

11
推荐指数
2
解决办法
1万
查看次数