Impossibile compilare il kernel: errore, il kernel non supporta la modalità PIC


8

Ho dei problemi a ricompilare il mio kernel. Scaricando il pacchetto sorgente, decomprimilo ed eseguilo

fakeroot make-kpkg kernel_image  

mi porta all'errore

               [...]

  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

Il problema può essere risolto modificando la configurazione del kernel ottenuta con make menuconfig.

Come eliminare questo errore e compilare correttamente


Quella torta non ha nulla a che fare con il tuo problema. Quali versioni esatte di distribuzione e pacchetto stai usando? Quale versione di make e gcc? Su quale architettura?
Gilles 'SO- smetti di essere malvagio' il

uname -ami dà Linux hostname 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux e la versione di gcc è gcc (Debian 6.2.0-9) 6.2.0 20161019. Ho seguito queste indicazioni precise.
user123456,

Risposte:


7

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

potresti provare la seguente 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 :=

Un paio di biglietti debian correlati:

E altra paraphenilia:


Come si applica questa patch? Vedi anche la mia domanda correlata sulla compilazione del driver Intel e1000e, che fornisce lo stesso errore: askubuntu.com/questions/851721/…
Amedee Van Gasse,

/usr/src/linux-headers-4.8.0-27/arch/x86$ cat ~ / e1000e-3.3.4 / disable-pie.patch | sudo patch -p1 file di patch Patch di makefile: **** patch non valida alla riga 7: tutte: vmlinux
Amedee Van Gasse

Per la patch che mostro sopra, questo è pensato per essere applicato al Makefile nella directory di linux. Ad esempio, dopo aver scaricato cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.15.tar.xz e aver espanso il sorgente, cambia in linux-4.8.15 e dovrebbe esserci un Makefile Là. La patch sopra è applicata a quel Makefile, o semplicemente modifica manualmente il file (io uso sed per applicare la modifica). Un'altra nota: i flag sono necessari con gcc6 ma non con gcc5.
Raymond Burkholder,

Io uso quanto segue per i miei build del kernel: github.com/rburkholder/vagrant/blob/master/bldkrnlpkg/… su debian / stretch
Raymond Burkholder
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.