Не уверен, что здесь произошло. Я пытаюсь обновить ядро 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/
... Есть идеи?