交叉编译linux模块,不带目标内核头,但target module.symvers可用

交叉编译linux模块,不带目标内核头,但target module.symvers可用,module,linux-kernel,cross-compiling,Module,Linux Kernel,Cross Compiling,我正在玩弄一个运行linux的嵌入式系统(Bebop Drone)。我有: linux内核源代码树(3.4.11)由制造商提供(从thx到GPL) .config制造商提供的文件 没有制造商提供的“内核头” 设备上没有/lib/modules/X/build区域 活动目标内核和设备上的一些模块(arm7) Ubuntu 15作为交叉编译平台 由于 我想将module option.ko添加到设备中。 我在.configm usbserial、usb_wwan等中配置了所需的选项。 (通过mak

我正在玩弄一个运行linux的嵌入式系统(Bebop Drone)。我有:

  • linux内核源代码树(3.4.11)由制造商提供(从thx到GPL)
  • .config制造商提供的文件
  • 没有制造商提供的“内核头”
  • 设备上没有/lib/modules/X/build区域
  • 活动目标内核和设备上的一些模块(arm7)
  • Ubuntu 15作为交叉编译平台
  • 由于
  • 我想将module option.ko添加到设备中。 我在.configm usbserial、usb_wwan等中配置了所需的选项。 (通过make oldconfig,make menuconf)

    所有将模块加载到目标系统的尝试都失败,dmegs声明ko文件的模块_布局具有与内核所需不同的CRC。 将“正确”CRC编辑到ko文件中只会将投诉转移到模块所需的另一个符号

    无论我在交叉编译时尝试什么,*.ko文件都有不匹配的符号CRC

    我不知道什么时候从目标系统中潜入“非匹配”Module.symvers,Module交叉编译的最后一个阶段打破了我的诡计,重新创建Module.symvers,覆盖了所需的目标CRC

    首先为什么会出现symvers问题,考虑到我使用的正是制造商发布的源代码树(而living kernel应该正在使用)

    如何解决symvers不匹配问题并为旧的运行内核生成“新”模块


    TIA

    案例已解决,编译器至关重要,它必须是/proc/version中指定的编译器,请参见上面的第四条注释。

    只需从源代码(在主机上)使用“来自制造商”的完整
    .config
    文件构建内核即可。这样一来,所有的内核符号都将与目标内核上的相同。这是行不通的。提取源代码,cp.config文件,make zImage,make modules生成一个Module.symvers,该Module.symvers与活动内核的CRC不匹配。编译器类型有多重要?parrot编译的die doc的复杂版本/标志等在哪里?
    编译器类型的重要性如何?
    编译器类型可能很关键。编译器版本差异可能对CRC不太重要。您可以尝试用target的
    Module.symvers
    文件替换您编译的内核中不兼容的
    Module.symvers
    ,然后编译您的模块。编译类型就是罪魁祸首:Sourcery CodeBench Lite 2012 03-57确实使用了/proc/version中指定的方法重新生成了运行系统的CRC!欢迎来到堆栈溢出!在这里,我们维护标题或正文中没有“已解决”标记的问题帖子。相反,我们允许OP回答他的问题,经过一段时间后,他回答了。这实际上意味着OP已经找到了解决问题的方法。从问题标题中删除(回滚)
    [SOLVED]
    后缀,将最后一条评论作为答案,并将其标记为已接受。