2012-01-22 56 views
2

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

其实我收到的时候我在我的系统发出insmod命令以下错误:

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

我认为这是不可能的。 –

回答

2

在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的输出。

1

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

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