Impossible de compiler le noyau: erreur, le noyau ne prend pas en charge le mode PIC


8

J'ai des problèmes pour recompiler mon noyau. Téléchargement du package source, décompression et exécution

fakeroot make-kpkg kernel_image  

me conduit à l'erreur

               [...]

  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

Le problème peut être résolu en modifiant la configuration du noyau obtenue avec make menuconfig.

Comment se débarrasser de cette erreur et réussir la compilation


Cette tarte n'a rien à voir avec votre problème. Quelle version exacte de distribution et de package utilisez-vous? Quelle version de make et gcc? Sur quelle architecture?
Gilles 'SO- arrête d'être méchant'

uname -ame donne Linux hostname 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux et la version gcc est gcc (Debian 6.2.0-9) 6.2.0 20161019. J'ai suivi ces indications précises.
user123456

Réponses:


7

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

vous pouvez essayer le patch suivant:

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

Quelques tickets Debian liés:

Et autres paraphénies:


Comment appliquer ce patch? Voir aussi ma question connexe sur la compilation du pilote Intel e1000e, qui donne la même erreur: 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 patching file Makefile patch: **** patch malformé à la ligne 7: tous: vmlinux
Amedee Van Gasse

Pour le patch que je montre ci-dessus, il est destiné à être appliqué au Makefile dans le répertoire linux. Par exemple, après avoir téléchargé cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.15.tar.xz et étendu la source, changez en linux-4.8.15, et il devrait y avoir un Makefile Là. Le patch ci-dessus est appliqué à ce Makefile, ou modifiez simplement le fichier manuellement (j'utilise sed pour appliquer la modification). Autre remarque: les drapeaux sont nécessaires avec gcc6 mais pas avec gcc5.
Raymond Burkholder

J'utilise ce qui suit pour mes builds de noyau: github.com/rburkholder/vagrant/blob/master/bldkrnlpkg/… sur debian / stretch
Raymond Burkholder
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.