Невозможно скомпилировать ядро: ошибка, ядро ​​не поддерживает режим PIC

8

У меня проблемы с перекомпиляцией моего ядра. Загрузите пакет с исходным кодом, распакуйте его и запустите

fakeroot make-kpkg kernel_image  

приводит меня к ошибке

               [...]

  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
  CHK     include/generated/package.h
  UPD     include/generated/package.h
  CC      kernel/bounds.s
kernel/bounds.c:1:0: error: code model kernel does not support PIC mode

Проблема может быть решена путем изменения конфигурации ядра, полученной с помощью make menuconfig.

Как избавиться от этой ошибки и иметь успешную компиляцию

user123456
источник
Этот пирог не имеет ничего общего с вашей проблемой. Какой точный дистрибутив и версии пакета вы используете? Какая версия make и gcc? На какой архитектуре?
Жиль "ТАК - перестань быть злым"
uname -aдает мне Linux hostname 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux и gcc версия есть gcc (Debian 6.2.0-9) 6.2.0 20161019. Я следовал этим точным указаниям.
user123456

Ответы:

7

От http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.8-rc2/0002-UBUNTU-SAUCE-no-up-disable-pie-when-gcc-has-it-enabl.patch

Вы можете попробовать следующий патч:

diff --git a/Makefile b/Makefile
index 5c18baa..e342473 100644
--- a/Makefile
+++ b/Makefile
@@ -612,6 +612,12 @@ endif # $(dot-config)
# Defaults to vmlinux, but the arch makefile usually adds further targets
all: vmlinux

+# force no-pie for distro compilers that enable pie by default
+KBUILD_CFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CFLAGS += $(call cc-option, -no-pie)
+KBUILD_AFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CPPFLAGS += $(call cc-option, -fno-pie) 

# The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default
# values of the respective KBUILD_* variables
ARCH_CPPFLAGS :=

Пара связанных билетов Debian:

И другие парафенилии:

Раймонд Буркхолдер
источник
Как применить этот патч? См. Также мой связанный вопрос о компиляции драйвера Intel e1000e, который выдает ту же ошибку: askubuntu.com/questions/851721/…
Амеде Ван Гассе
/usr/src/linux-headers-4.8.0-27/arch/x86$ cat ~ / e1000e-3.3.4 / disable-pie.patch | патч sudo -p1 патч-файл патч Makefile: **** некорректный патч в строке 7: все: vmlinux
Амеди Ван
Для патча, который я показываю выше, он предназначен для применения к Makefile в каталоге linux. Например, после загрузки cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.15.tar.xz и расширения исходного кода перейдите на linux-4.8.15, и там должен быть Makefile там. Приведенный выше патч применяется к этому Makefile или просто редактирует файл вручную (я использую sed, чтобы применить изменения). Еще одно замечание: флаги нужны с gcc6, но не с gcc5.
Рэймонд Буркхолдер
Я использую следующее для своих сборок ядра: github.com/rburkholder/vagrant/blob/master/bldkrnlpkg/… на debian / stretch
Рэймонд Буркхолдер