could not insert module agile_nic.ko: Invalid module format

一般分为2中情况:

、依赖文件没有被加载,modinfo agile_nic.ko 查看需要的依赖module,先加载依赖model,再加载驱动 agile_nic.ko

、驱动的 vermagic 和系统当前的 vermagic 不匹配。

查看驱动的 vermagic:

$ modinfo agile_nic.ko 
filename:       /root/agile_net/agile_nic.ko
version:        0.0.1
description:    Agile PCI Net Driver
author:         Li yandong
license:        GPL v2
srcversion:     CE2B5DEF0BBF2A1FCB0387E
alias:          pci:v00001957d00001000sv*sd*bc*sc*i*
depends:        virtio,virtio_ring
retpoline:      Y
name:           agile_nic
vermagic:       5.3.8-BonusCloud+ SMP mod_unload modversions 

最后一行为驱动 agile_nic 对应的 vermagic: 5.3.8-BonusCloud+

查看已经启动的内核的 vermagic:

$ uname -r
5.3.8-BonusCloud+

如果这2个magic不一样,则 insmod agile_nic.ko 会提示:

“could not insert module agile_nic.ko: Invalid module format”

解决方法:

1. 用当前系统已经跑的内核的源码 来编译 agile_nic model。编译完后就可以insmod agile_nic.ko

2. 改变host的linux内核版本,让host跑我们编译 agile_nic model 版本的内核版本的系统。参考:

Centos8 升级linux内核版本

3. 临时应付事: 修改 Makefile 中的版本号,例如:

1. 修改顶层目录 Makefile 中的版本
eg:
VERSION = 5
PATCHLEVEL = 3
SUBLEVEL = 8
EXTRAVERSION =

2. make menuconfig 修改: .config
//General setup --> [ ] Automatically append version information to the version string 
# CONFIG_LOCALVERSION_AUTO is not set

//General setup --> (-BonusCloud) Local version - append to kernel release
CONFIG_LOCALVERSION="-BonusCloud"

//还需要测试
CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y

一般的内核默认已经使能了 "Enable loadable module support",不需要手动修改:
make menuconfig
[*] Enable loadable module support  ---> 
	--- Enable loadable module support             
	[ ]   Forced module loading             //打开可加载模块支持,如果打开它则必须通过”make modules_install”把内核模块安装在/lib/modules/中        
	[*]   Module unloading                  //允许卸载已经加载的模块
	[ ]     Forced module unloading         //允许模块强制加载 
	[*]   Module versioning support         //允许使用为其他内核版本编译的模块,可会造成系统崩溃.这同样是个坏主意!建议关闭.
	[*]   Source checksum for all modules   //为所有的模块校验源码
	[ ]   Module signature verification     //模块签名认证
	[ ]   Compress modules on installation  //在安装时压缩模块
	[ ]   Trim unused exported kernel symbols  

host 中的 vermagic 生成文件在:

/usr/src/kernels/`uname -r`/include/linux/vermagic.h 中,eg:

/lib/modules/5.3.8-1.el7.elrepo.x86_64/build/include/linux/vermagic.h 最后,是由各个宏定义组成的:

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值