在之前我也遇到这个问题,后来我解决了,但是当时没有记录下来,现在又遇到了,害我整了半天,所以现在记录下,供以后参考;
我开始的加载模块的时候报这样的错误:
hello: module_layout: kernel tainted. Disabling lock debugging due to kernel taint hello: version magic '2.6.32-504.el6.i686 SMP mod_unload 686 ' should be '2.6.32-504.el6.i686 SMP mod_unload modversions 686 '
前面两行错误是内核污染,一般是验证时没通过,或者没有干脆就没有写MODULE_LICENSE()验证。我开始写的是MODULE_LICENSE("Dual BSD/GPL"); 验证通不过,后来我改成:MODULE_LICENSE("GPL");
就可以了(其实感觉开始那个验证也是可以的,后来我又实验了下)。
至于第二个错误是,你内核树版本和你运行的内核版本不一致导致的。可以参考下这位仁兄的:http://blog.sina.com.cn/s/blog_752fa65f0100p6wc.html;以及这位仁兄的:http://blog.sina.com.cn/s/blog_6e5e78bf010105jj.html
我这里就分享下我的解决方法和步骤(其实和那位仁兄提到的一样);
第一步、看看你运行内核的版本:ls /usr/src/kernels/2.6.32-504.12.2.el6.i686/ ;这里面存放的是你内核相应版本的源代码,这是我个人理解的。因为开始/usr/src/kernel/目录下什么都没有,我是通过命令:yum install kernel-headers kernel-devel gcc获取到的。可以通过rpm -qa | grep ‘kernel‘ 命令来查看下这些内核相关包;也可以用uname -r 命令来查看下你内核版本的信息;但是很奇怪的是我用uname
-r 得到的版本信息和/usr/src/kernel/下面的不一样,这个希望知道的兄弟告诉下。(可能是uname -r显示的是运行版本号,而不是内核详细版本号);
下面是 rpm -qa | grep ‘kernel‘ 命令显示的:
kernel-2.6.32-504.el6.i686 kernel-headers-2.6.32-504.12.2.el6.i686 kernel-firmware-2.6.32-504.el6.noarch dracut-kernel-004-356.el6.noarch kernel-devel-2.6.32-504.12.2.el6.i686
第二步、查看下你内核源码树, ls /lib/modules/2.6.32-504.el6.i686/ -l ;下面只贴两个软连接的文件
lrwxrwxrwx. 1 root root 25 Apr 11 09:52 build -> /home/kernel/linux-2.6.32 lrwxrwxrwx. 1 root root 25 Apr 11 09:52 source -> /home/kernel/linux-2.6.32
我做的源码树的内核为:linux-2.6.32;
第三步、在Makefile文件中修改下配置,修改完如下:
obj-m:=hello.o #KERDIR=/lib/modules/$(shell uname -r)/build KERDIR=/usr/src/kernels/2.6.32-504.12.2.el6.i686 CURDIR=$(shell pwd) all: make -C $(KERDIR) M=$(CURDIR) modules clean: make -C $(KERDIR) M=$(CURDIR) clean
现在基本上是可以了;其他解决办法可以看看上面给的那位仁兄的链接;
如有错误,请大家指正,共同成长嘛。谢谢!!
加载模块报错:version magic '2.6.32-504.el6.i686 SMP mod_unload 686 ' should