Kernel kann nicht kompiliert werden: Fehler, Kernel unterstützt den PIC-Modus nicht

8

Ich habe Probleme beim Neukompilieren meines Kernels. Laden Sie das Quellpaket herunter, dekomprimieren Sie es und führen Sie es aus

fakeroot make-kpkg kernel_image  

führt mich zum Fehler

               [...]

  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

Das Problem kann durch Ändern der mit erhaltenen Kernel-Konfiguration behoben werden make menuconfig.

Wie Sie diesen Fehler beseitigen und erfolgreich kompilieren können

user123456
quelle
Diese Torte hat nichts mit Ihrem Problem zu tun. Welche genauen Distributions- und Paketversionen verwenden Sie? Welche Version von make und gcc? Auf welcher Architektur?
Gilles 'SO - hör auf böse zu sein'
uname -agibt mir Linux hostname 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux und gcc version ist gcc (Debian 6.2.0-9) 6.2.0 20161019. Ich habe diese genauen Angaben befolgt .
user123456

Antworten:

7

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

Sie können den folgenden Patch ausprobieren:

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 :=

Ein paar verwandte Debian-Tickets:

Und andere Paraphenilien:

Raymond Burkholder
quelle
Wie wendet man diesen Patch an? Siehe auch meine verwandte Frage zum Kompilieren des Intel e1000e-Treibers, die den gleichen Fehler liefert
Amedee Van Gasse
/usr/src/linux-headers-4.8.0-27/arch/x86$ cat ~ / e1000e-3.3.4 / disable-pie.patch | sudo patch -p1 patching file Makefile patch: **** fehlerhafter Patch in Zeile 7: alle: vmlinux
Amedee Van Gasse
Für den Patch, den ich oben zeige, soll dies auf das Makefile im Linux-Verzeichnis angewendet werden. Wechseln Sie beispielsweise nach dem Herunterladen von cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.15.tar.xz und dem Erweitern der Quelle in linux-4.8.15, und es sollte ein Makefile vorhanden sein Dort. Der obige Patch wird auf dieses Makefile angewendet oder Sie bearbeiten die Datei einfach manuell (ich verwende sed, um die Änderung zu übernehmen). Noch ein Hinweis: Die Flags werden mit gcc6 benötigt, aber nicht mit gcc5.
Raymond Burkholder
Ich verwende Folgendes für meine Kernel-Builds: github.com/rburkholder/vagrant/blob/master/bldkrnlpkg/… auf debian / align
Raymond Burkholder