Загрузка 64-битного модуля в 32-битное ядро ​​с помощью insmod - PullRequest
2 голосов
/ 22 января 2012

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

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

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

Ответы [ 3 ]

2 голосов
/ 23 января 2012

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

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

linux/drivers/net/benet

. После этого введите (как ваш обычный пользователь)

make

, а затем

sudo insmod be2net.ko

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

2 голосов
/ 22 января 2012

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

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

1 голос
/ 23 января 2012

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

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

...