jiajiawozuihao 2023-08-08 17:25 采纳率: 0%
浏览 5

insmod nvme报错:-1 Invalid module format

在一个redhat7.2 4.4.185版本内核系统下,编译nvme.ko内核模块,拷贝到另一个redhat7.2 4.4.185版本内核系统下,执行insmod后,报 insmod:error inserting 'nvme.ko' :-1 Invalid module format,dmesg中报nvme:desagrees about version of symbol module_layout。
使用modinfo查看原先的 4.4.185版本内核系统下的nvme模块信息如下:

filename:       /usr/src/linux-4.4.185/drivers/nvme/host/nvme.ko
version:        1.0
license:        GPL
author:         Matthew Wilcox <willy@linux.intel.com>
srcversion:     15D5D7EF8792702A797155A
alias:          pci:v0000106Bd00002001sv*sd*bc*sc*i*
alias:          pci:v*d*sv*sd*bc01sc08i02*
depends:        
intree:         Y
vermagic:       4.4.185 SMP mod_unload modversions 
parm:           admin_timeout:timeout in seconds for admin commands (byte)
parm:           io_timeout:timeout in seconds for I/O (byte)
parm:           shutdown_timeout:timeout in seconds for controller shutdown (byte)
parm:           nvme_major:int
parm:           nvme_char_major:int
parm:           use_threaded_interrupts:int
parm:           use_cmb_sqes:use controller's memory buffer for I/O SQes (bool)

我编译的nvme.ko信息如下:

filename:      nvme.ko
version:        1.0
license:        GPL
author:         Matthew Wilcox <willy@linux.intel.com>
srcversion:     15D5D7EF8792702A797155A
alias:          pci:v0000106Bd00002001sv*sd*bc*sc*i*
alias:          pci:v*d*sv*sd*bc01sc08i02*
depends:        
retpoline:         Y
vermagic:       4.4.185 SMP mod_unload modversions 
parm:           admin_timeout:timeout in seconds for admin commands (byte)
parm:           io_timeout:timeout in seconds for I/O (byte)
parm:           shutdown_timeout:timeout in seconds for controller shutdown (byte)
parm:           nvme_major:int
parm:           nvme_char_major:int
parm:           use_threaded_interrupts:int
parm:           use_cmb_sqes:use controller's memory buffer for I/O SQes (bool)

比对的只有intree和retpoline的区别,其他信息都是一样的,不知道这里应该怎么修改,是不是这里的问题?

  • 写回答

1条回答 默认 最新

  • 大师兄6668 Python领域新星创作者 2023-08-08 18:24
    关注

    以下回答部分参考GPT,请确认是否可以解决你的问题:
    根据提供的信息,看起来问题出在intreeretpoline参数上。在两个版本的内核系统中,这两个参数的值不一致导致了模块加载失败。

    • intree参数表示该模块是否在内核源代码树中,原先的模块是intree: Y,而你编译的模块没有该参数,这可能导致加载失败。你可以尝试在编译时指定该参数为Y,以确保模块与内核匹配。

    • retpoline参数是用于提高系统安全性的一种技术,用于缓解 Spectre 漏洞。原先的模块没有该参数,而你编译的模块有该参数,这可能导致加载失败。你可以尝试在编译时去除该参数,或者确认目标系统的内核是否已启用了 retpoline 技术。

    建议的解决方法是重新编译内核模块时,确保提供完整的参数,并且与目标系统的内核版本一致。你可以在编译命令中添加intree=Y参数,并尝试去除retpoline参数。另外,还需确认编译环境的配置是否正确,包括编译工具链和相关的依赖库。

    如果问题仍然存在,可以尝试使用原先系统中的内核源代码重新编译模块,以确保匹配的一致性。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月8日

悬赏问题

  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000