insmod内核版本问题解决方法

来源:互联网 发布:阿里云网站免费模板 编辑:程序博客网 时间:2024/04/30 09:22
内核模块编写时,insmod内核版本问题的解决方法:
原程序(hello.c):
#define MODULE
#include <linux/module.h>
 
int init_module(void)
{
       printk(“<1>Hello, world!/n”);
       return 0;
}
void cleanup_module(void)
{
       printk(“<1>Goodbye cruel world/n”);
}
 
编译:gcc –c hello.c
insmode hello.o
结果:
hello.o: kernel-module version mismatch
       hello.o was compiled for kernel version 2.4.20
       while this kernel is version 2.4.20-8
解决方法:编译时加入-I /usr/src/linux2.4.20-8/include
gcc –c hello.c –I /usr/src/linux2.4.20-8/include
其中/usr/src/linux2.4.20-8是Linux的源代码(我的机器是Rethat 9)
此时再启动该模块:insmod hello.o
结果又出现问题:
Warning: loading hello.o will taint the kernel: no license
 See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Hello, world!
解决方法:添加MODULE_LICENSE(“GPL”)
int init_module(void)
{
       MODULE_LICENSE(“GPL”);
       printk(“<1>Hello, world!/n”);
       return 0;
}
此时再编译,加载,没有问题。
root# gcc –c hello.c –I /usr/src/linux2.4.20-8/include
root# insmod hello.o
Hello, world!
Root# rmmod hello
Goodbye cruel world
 
最后:
下面我们来查看这个模块所执行的显示内容,这些内容是不会在终端显示的。要执行命令:
dmesg
来查看。在最下面显示
Hello,World!
Goodbye cruel world
Hello,World!
...
还有一种方法可以看到这个模块是否加载成功否。
$cat /proc/modules
从中可以看到hello 这个模块,这就是我加载的。
这个文件中的信息分为四列。第一列:模块名。第二列:模块使用内存的字节数。第三列:模块的当前使用计数。第四列:备注。
原创粉丝点击