【问题标题】:insmod: 'error ... invalid module format' - cross compilation usageinsmod: '错误...无效的模块格式' - 交叉编译用法
【发布时间】:2019-07-15 20:51:23
【问题描述】:

我想解决这个错误,显然是在更新和构建内核并使用以前的 Linux 设备驱动程序模块时发生的(我将一个或两个参数设置更改为内核,编译并构建并获取新的内核映像,问题开始)。

但是,在构建新的模块设备驱动程序时,我不断收到错误:

[nn.nnn] 'module.ko':版本魔法'4.9.0-00011-ge82bfab-dirty SMP mod_unload aarch64' 应该是 '4.9.0 SMP mod_unload aarch64'

几个cmets:

  • 检查了以前的帖子相关问题 (insmod error: inserting './hello.ko': -1 Invalid module format"),但它使用 'uname -a' 这对我没有帮助,因为我使用我的 Linux 操作系统作为其他操作系统(嵌入式)的编译环境 - 交叉编译使用。
  • 我在内核源代码树(内核下载的包)中搜索了版本字符串,但只找到了自动生成字符串的位置(在 ../include/generated/utsrelease.h)
  • 内核(我正在使用 uImage:u-boot Legacy uImage,Linux / OS Kernel)和 module.ko 使用相同的 CROSS_COMPILE 路径的 Makefile。

我在这里缺少什么?

【问题讨论】:

  • 您可能从 git repo (ge82bfab-dirty) 为内核构建了模块,但您的内核是从其他来源构建的。
  • 嗨@Tsyvarev,如果我使用指向相同内核版本的相同CROSS_COMPILE 路径,这怎么可能? (见我的第三个 cmets @post)
  • 我不知道。可能是你加载了错误的内核。

标签: linux linux-kernel kernel cross-compiling insmod


【解决方案1】:

发现了问题。 以为我使用的是正确的内核编译,但是 - 正如@Tsyvarev 所暗示的那样,我一直使用其他内核版本。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-26
    • 2012-03-10
    • 2011-03-28
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    相关资源
    最近更新 更多