2012-01-22 7 views
2

Возможно ли загрузить файл .ko (файл объекта ядра), который был скомпилирован в 64-разрядной процессорной системе в 32-разрядную процессорную систему?Загрузка 64-битного модуля в 32-битное ядро ​​с использованием insmod

На самом деле я получаю следующее сообщение об ошибке, когда я выполняю команду insmod в моей системе:

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

Я думаю, что это невозможно. –

ответ

2

Невозможно запустить 64-разрядный код в 32-разрядной системе. В зависимости от требований обратное может быть правдой (запуск 32-разрядного программного обеспечения или библиотек в 64-разрядной системе), но 32-разрядная архитектура не может понять 64-разрядный код. Вам нужно будет скомпилировать модуль в вашей системе.

Сначала загрузите исходный код ядра с kernel.org. Затем извлечь, и компакт-диск в

linux/drivers/net/benet 

Там типа (в качестве обычного пользователя)

make 

, а затем

sudo insmod be2net.ko 

Это должно работать для вас.

2

Нет, это не возможно загрузить 64-разрядные модули 32-битное ядро, и поэтому вы получаете ошибку. Причина в том, что 64-битная и 32-битная программа имеют несовместимые ABI (например, различные соглашения вызова). Это также причина того, что 64-битные приложения не могут быть связаны с 32-разрядными библиотеками, например.

Обратите внимание, что insmod обычно дает неопределенное сообщение об ошибке. Более подробное сообщение смотрите на выходе dmesg.

1

Процессор, в котором он был скомпилирован, имеет значение не на всех. Параметры компилятора и компилятора имеют значение. Если он был скомпилирован для 64-битного процессора, он не может работать на 32-разрядном процессоре, потому что он использует другой набор команд.

Однако 64-разрядный процессор может запускать кросс-компилятор и создавать 32-битные двоичные файлы. Маловероятно, что вы это сделали.