2012-01-22 57 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位二進制文​​件。這是不可能的。