在挂载一个第三方提供的驱动的时候,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
原文:http://zhouqiqiu1982.blog.51cto.com/1143393/1363911