是否可以将在64位处理器系统中编译的.ko
文件(内核对象文件)加载到32位处理器系统中?
实际上,当我在系统中发出insmod命令时出现以下错误:
insmod: error inserting 'be2net.ko': -1 Invalid module format
答案 0 :(得分:2)
不,无法将64位模块加载到32位内核,这就是您收到错误的原因。原因是64位和32位程序具有不兼容的ABI(例如,不同的调用约定)。这也是64位应用程序无法与32位库链接的原因。例如。
请注意,insmod通常会给出模糊的错误消息。有关更详细的消息,请查看dmesg
的输出。
答案 1 :(得分:2)
无法在32位系统中运行64位代码。根据要求,反之亦然(在64位系统中运行32位软件或库),但32位架构无法理解64位代码。您需要在系统上编译模块。
首先从kernel.org下载内核源代码。然后提取,并进入
linux/drivers/net/benet
在那里,输入(作为普通用户)
make
然后
sudo insmod be2net.ko
那应该适合你。
答案 2 :(得分:1)
编译它的处理器根本不重要。编译器和编译器选项很重要。如果它是为64位处理器编译的,它不能在32位处理器上运行,因为它使用不同的指令集。
但是,64位处理器可以运行交叉编译器并创建32位二进制文件。你不可能这样做。