Linux 2.6.x 内核模块加载错误 “Invalid module format” 解决办法

参考URL: http://blog.csdn.net/pottichu/archive/2007/11/19/1892203.aspx

环境: vmware + fedora8;
             gcc version 4.1.2 20070925 (Red Hat 4.1.2-33);
             kernel source 用 kernel-2.6.23.1-42.fc8.src.rpm安装;
             uname -r 为 2.6.23.1-42.fc8;

问题: 可以正常编译我写的驱动模块,但是加载(insmod)的时候提示错误: insmod: error inserting 'xxx.ko': -1 Invalid module format;用# dmesg | tail 看到如下信息:xxx: version magic '2.6.23.1 SMP mod_unload 686 4KSTACKS ' should be '2.6.23.1-42.fc8 SMP mod_unload 686 4KSTACKS '; 这一行的意思就是说,当前插入的模块xxx.ko的版本信息(version magic)与正运行的kernel的版本信息不一致!应该是 2.6.23.1-42.fc8 SMP mod_unload 686 4KSTACKS,而实际上xxx.ko的版本信息却是:2.6.23.1 SMP mod_unload 686 4KSTACKS; 显然它们之间差别是很小的。实际上,根据上面安装的kernel源码来看,它们应该是没有什么差别的。 所以,下面采用了一种比较极端的方式,强制xxx.ko的版本信息与运行的kernel保持一致。

解决:
     修改/usr/src/kernels/2.6.23.1-42.fc8-i686/include/linux/utsrelease.h文件中的宏定义
     #define UTS_RELEASE "2.6.23.1"
     为
     #define UTS_RELEASE "2.6.23.1-42.fc8"
     然后重新编译xxx.ko模块,这时候,它与内核的版本信息应该就是一致的了!试验下来确实如此,xxx.ko已经可以正常工
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值