linux内核版本不一致,内核模块版本和内核版本不一致的处理方法

内核版本是如何生成的:

Linux 内核在进行模块装载时先完成模块的 CRC 值校验,再核对

vermagic 中的字符信息,linux版本:在linux/utsrelease.h中定义,文件中的内容如下:#define

UTS_RELEASE "2.6.35.7-perf+",utsrelease.h是kernel编译后自动生成的,用户更改里面的内容不会有效果。

在init/version.c中,定义了kernel启动时的第一条打印信息:

const char linux_banner[] =

"Linux version" UTS_RELEASE "(" LINUX_COMPILE_BY "@"LINUX_COMPILE_HOST") (" LINUX_COMPILER ")" UTS_VERSION "\n";

这里UTS_RELEASE在kernel编译时自动生成

在init/main.c的start_kernel函数中,有kernel启动的第一条打印信息,这条信息是dmesg命令打印出来:

printk(KERN_NOTICE "%s", linux_banner);

方法二:

驱动模块的version magic信息是怎么生成的:

2

.6内核下,在linux/vermagic.h中定义有VERMAGIC_STRING,VERMAGIC_STRING不仅包含内核版本号,还包含有

内核使用的gcc版本,SMP与PREEMPT等配置信息。模块在编译时,我们可以看到屏幕上会显示"MODPOST"。在此阶

段,VERMAGIC_STRING会添加到模块的modinfo段。在内核源码目录下scripts\mod\modpost.c文件中可以看到模块后

续处理部分的代码。模块编译生成后,通过`modinfo

mymodule.ko`命令可以查看此模块的vermagic等信息。2.6内核下的模块装载器里保存有内核的版本信息,在装载模块时,装载器会比较所

保存的内核vermagic与此模块的modinfo段里保存的vermagic信息是否一致,两者一致时,模块才能被装载。为了使两个版本一致:可以把

依赖源码中的include/linux/vermagic.h中的UTS_RELEASE修改成与目标机器的版本一致,这样,再次编译模块就可以了。

参考:

http://blog.sina.com.cn/s/blog_6e5e78bf010105jj.html

http://blog.csdn.net/armeasy/article/details/6027563

原文:http://www.cnblogs.com/muyuzhanglao/p/4311225.html

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值