【问题标题】:Loading 64-bit module to a 32-bit kernel using insmod使用 insmod 将 64 位模块加载到 32 位内核
【发布时间】:2012-02-16 06:54:55
【问题描述】:

是否可以将在 64 位处理器系统中编译的 .ko 文件(内核对象文件)加载到 32 位处理器系统中?

实际上,当我在系统中发出 insmod 命令时出现以下错误:

insmod: error inserting 'be2net.ko': -1 Invalid module format

【问题讨论】:

    标签: linux linux-kernel kernel-module


    【解决方案1】:

    无法在 32 位系统中运行 64 位代码。根据要求,反过来也可以(在 64 位系统中运行 32 位软件或库),但 32 位架构无法理解 64 位代码。您需要在系统上编译该模块。

    首先从kernel.org下载内核源码。然后解压,cd进入

    linux/drivers/net/benet
    

    在那里,输入(作为您的普通用户)

    make
    

    然后

    sudo insmod be2net.ko
    

    这应该适合你。

    【讨论】:

      【解决方案2】:

      不,不能将 64 位模块加载到 32 位内核,这就是您收到错误的原因。原因是 64 位和 32 位程序具有不兼容的 ABI(例如不同的调用约定)。这也是 64 位应用程序无法与 32 位库链接的原因。

      请注意,insmod 通常会给出模糊的错误消息。有关更详细的消息,请查看 dmesg 的输出。

      【讨论】:

        【解决方案3】:

        编译它的处理器根本不重要。编译器和编译器选项很重要。如果它是为 64 位处理器编译的,它不能在 32 位处理器上运行,因为它使用不同的指令集。

        但是,64 位处理器可以运行交叉编译器并创建 32 位二进制文​​件。您不太可能这样做。

        【讨论】:

          猜你喜欢
          • 2014-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-30
          相关资源
          最近更新 更多