Linux 学习笔记_8_进程管理_1_进程的概念
2014-01-24 17:32
726 查看
在挂载一个第三方提供的驱动的时候,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,这些符号就会在后面加一段校验字串。这样做的目的是避免模块不正确加载情况下,使得内核崩溃。
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,这些符号就会在后面加一段校验字串。这样做的目的是避免模块不正确加载情况下,使得内核崩溃。
相关文章推荐
- 【Linux学习笔记二十三】进程和服务的管理
- UNIX环境编程学习笔记(17)——进程管理之进程的几个基本概念
- Linux学习笔记:进程管理
- linux进程管理学习笔记
- Linux 程序设计学习笔记----进程管理与程序开发(下)
- UNIX环境编程学习笔记(17)——进程管理之进程的几个基本概念
- Linux 程序设计学习笔记----进程管理与程序开发(上)
- Linux内核学习笔记——进程管理
- Linux 学习笔记_8_进程管理_2_进程管理命令
- Linux 学习笔记_8_进程管理_3_计划任务
- ARM学习笔记——Linux进程管理
- 【Linux学习笔记六】进程管理
- Linux学习笔记之进程管理
- Linux 学习笔记【4】 进程管理
- Linux——进程管理学习简单笔记
- Linux+C学习笔记之进程管理
- linux学习笔记之进程管理
- linux 进程管理学习笔记
- 韩顺平Linux笔记(十二)——进程的概念和管理
- Linux——进程管理简单学习笔记(二)