Не уверен, что здесь произошло. Я пытаюсь обновить ядро Linux с 4.9.x до 4.14.x, и произошло следующее:

In file included from arch/x86/decode.c:26:0:
arch/x86/../../elf.h:22:18: fatal error: gelf.h: No such file or directory
 #include <gelf.h>
                  ^
compilation terminated.
mv: cannot stat ‘/usr/src/linux-4.14.51/tools/objtool/arch/x86/.decode.o.tmp’: No such file or directory
make[4]: *** [/usr/src/linux-4.14.51/tools/objtool/arch/x86/decode.o] Error 1
make[3]: *** [arch/x86] Error 2
make[2]: *** [/usr/src/linux-4.14.51/tools/objtool/objtool-in.o] Error 2
make[1]: *** [objtool] Error 2
make: *** [tools/objtool] Error 2

Есть идеи, что здесь произошло (кроме очевидного)? Должен ли " gelf.h " уже находиться на моем компьютере? Или в ядре тарбол?

Я скачал vanilla 4.14.51 с сайта kernel.org - я успешно скомпилировал свое собственное (немодифицированное) ядро vanilla в течение 14 лет, но это новое.

Мой компьютер - это ноутбук Dell с Core2 i5 (64-разрядной) и Slackware 14.1 - я обновил версию 3.17.x с 4.4.x несколько лет назад, а совсем недавно - до 4.9.x (в настоящее время 4.9.109).

У меня установлен libelf:

me@mylaptop:~$ locate gelf.h
/usr/include/libelf/gelf.h

me@mylaptop:~$ ls /var/log/packages/*elf*
/var/log/packages/libelf-0.8.13-x86_64-2

ДОПОЛНЕНИЕ

Пробуя 4.14.55 прошлой ночью, я заметил, что каталог, в котором скрипт сборки ядра ожидает увидеть «gelf.h», находится в дереве исходников ядра, а не в обычном /usr/include .

При этом соответствующий каталог в моем (работающем) дереве исходного кода 4.9.x не имеет ни файлов .o ни .ko . Очевидно, что в 4.14.x включен элемент конфигурации, который я не включил в 4.9.x.

Я попытался настроить 4.14.x как можно ближе к моему рабочему 4.9.x; Я знаю о некоторых новых опциях, но в целом я стараюсь сохранять одинаковые конфигурации между промежуточными версиями ядра.

Тем не менее, я не знаю, какой параметр конфигурации он хотел бы видеть заголовочные файлы в linux-4.14.*/tools/objtool/arch/x86/ ... Есть идеи?

1 ответ1

0

У меня была очень похожая проблема при обновлении моего ядра в Slackware 14.1 с практически той же ошибкой. Я очень новичок в бизнесе ядра, но я верю, что установка библиотеки libelf решит проблему. Это задокументировано здесь:

https://directory.fsf.org/wiki/Libelf

Кроме того, я считаю, что проблема должна быть обнаружена поведением make по умолчанию, но это не так. Я могу быть совершенно не прав в этом отношении, но вот соответствующий патч, чтобы в Slackware 14.1 не было:

https://lore.kernel.org/patchwork/patch/670761/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .