首页 > 其他 > 详细

【kernel】挂载驱动出现的版本错误

时间:2014-02-27 21:17:53      阅读:1096      评论:0      收藏:0      [点我收藏+]

在挂载一个第三方提供的驱动的时候,insmod命令后出现错误信息:

GPL_***: version magic ‘2.6.31--LSDK-9.2.0_U6.616 mod_unload modversions MIPS32_R2 32BIT ‘ should be ‘2.6.31--LSDK-9.2.0_U6.616 mod_unload MIPS32_R2 32BIT ‘
NetUSB: version magic ‘2.6.31--LSDK-9.2.0_U6.616 mod_unload modversions MIPS32_R2 32BIT ‘ should be ‘2.6.31--LSDK-9.2.0_U6.616 mod_unload MIPS32_R2 32BIT ‘

按照提示信息,应该是挂载驱动和当前运行的kernel 版本不一样导致的,查看代码,发现是在:

include/linux/vermagic.h中定义:

/* Simply sanity version stamp for modules. */
#ifdef CONFIG_SMP
#define MODULE_VERMAGIC_SMP "SMP "
#else
#define MODULE_VERMAGIC_SMP ""
#endif
#ifdef CONFIG_PREEMPT
#define MODULE_VERMAGIC_PREEMPT "preempt "
#else
#define MODULE_VERMAGIC_PREEMPT ""
#endif
#ifdef CONFIG_MODULE_UNLOAD
#define MODULE_VERMAGIC_MODULE_UNLOAD "mod_unload "
#else
#define MODULE_VERMAGIC_MODULE_UNLOAD ""
#endif
#ifdef CONFIG_MODVERSIONS
#define MODULE_VERMAGIC_MODVERSIONS "modversions "
#else
#define MODULE_VERMAGIC_MODVERSIONS ""
#endif
#ifndef MODULE_ARCH_VERMAGIC
#define MODULE_ARCH_VERMAGIC ""
#endif

#define VERMAGIC_STRING                         \
   UTS_RELEASE " "                            \
   MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT             \
   MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS    \
   MODULE_ARCH_VERMAGIC


这里应该是CONFIG_MODVERSIONS这个定义差异导致的,第三方的驱动中编译驱动使用的SDK打开了这个宏,而我当前使用的kernel没有打开。

网上查找资料看看CONFIG_MODVERSIONS的作用,原因是linux 内核里面有很多export给其他模块使用的符号表;一般情况下,如果没有选择CONFIG_MODVERSIONS,这些符号是正常的字串;如果选择了CONFIG_MODVERSIONS,这些符号就会在后面加一段校验字串。这样做的目的是避免模块不正确加载情况下,使得内核崩溃。


【kernel】挂载驱动出现的版本错误,布布扣,bubuko.com

【kernel】挂载驱动出现的版本错误

原文:http://zhouqiqiu1982.blog.51cto.com/1143393/1363911

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!