J'ai essayé de compiler la dernière version du noyau Linux v4.8.9 sur Ubuntu 16.10 et cette erreur persiste après que j'ai créé le fichier .config par défaut, que je l'ai modifié avec menuconfig et exécuté make par lui-même. J'ai également exécuté make mrproper dès que j'ai décompressé le fichier. Voici le résultat juste après que je lance make:
scripts/kconfig/conf --silentoldconfig Kconfig
SYSTBL Arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h
SYSHDR Arch/x86/entry/syscalls/../../include/generated/asm/unistd_32_ia32.h
SYSHDR Arch/x86/entry/syscalls/../../include/generated/asm/unistd_64_x32.h
SYSTBL Arch/x86/entry/syscalls/../../include/generated/asm/syscalls_64.h
SYSHDR Arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_32.h
SYSHDR Arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_64.h
SYSHDR Arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_x32.h
HOSTCC Arch/x86/tools/relocs_32.o
HOSTCC Arch/x86/tools/relocs_64.o
HOSTCC Arch/x86/tools/relocs_common.o
HOSTLD Arch/x86/tools/relocs
CHK include/config/kernel.release
UPD include/config/kernel.release
WRAP Arch/x86/include/generated/asm/clkdev.h
WRAP Arch/x86/include/generated/asm/cputime.h
WRAP Arch/x86/include/generated/asm/dma-contiguous.h
WRAP Arch/x86/include/generated/asm/early_ioremap.h
WRAP Arch/x86/include/generated/asm/mcs_spinlock.h
WRAP Arch/x86/include/generated/asm/mm-Arch-hooks.h
CHK include/generated/uapi/linux/version.h
UPD include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
UPD include/generated/utsrelease.h
CC kernel/bounds.s
kernel/bounds.c:1:0: error: code model kernel does not support PIC mode
/*
Kbuild:45: recipe for target 'kernel/bounds.s' failed
make[1]: *** [kernel/bounds.s] Error 1
Makefile:1015: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2
J'ai également essayé de compiler avec l'option -no-pie après la commande make, mais elle génère un ensemble de nouvelles erreurs, indiquant constamment qu'il y a des "cibles manquantes". J'ai la version 6.2.0 de gcc. J'ai aussi installé gcc-5 parce que je pensais au début que c’était peut-être parce que gcc était trop récent mais que le même problème persiste dans gcc-5. Quelqu'un dans les listes de diffusion ou un autre forum a mentionné que le problème avait été résolu en clonant directement à partir de git, mais que cela ne m'a pas aidé non plus.
Je suis curieux de savoir si quelqu'un d'autre a rencontré ce problème et si oui, quelle solution pourrait être?
NOTE: J'utilise Ubuntu dans Virtualbox sur un Mac si cela pourrait être une source possible de problèmes.
Le problème est lié à votre installation de gcc. Dans les versions gcc supérieures à 6, PIE (exécutable indépendant de la position) est activé par défaut. Donc, pour compiler, vous devez le désactiver. Même gcc 5 a le problème. C'est un bug connu pour gcc. lien de bogue .
Jusqu'à présent, il n'y a pas de correctif officiel du côté de gcc. La solution consiste donc à corriger le fichier Makefile de la source du noyau.
Si vous êtes habitué à corriger le fichier source, utilisez les codes de ce lien pour créer le fichier de correctif, puis essayez de le compiler . Fichier de correctif
Faites-moi savoir si vous rencontrez des difficultés pour installer le correctif.
Ouvrez le Makefile, recherchez CFLAGS_EXTRA et ajoutez-lui l'option suivante -fno-pie
J'ai eu la ligne:
EXTRA_CFLAGS += $(CFLAGS_EXTRA)
Je l'ai changé pour:
EXTRA_CFLAGS += $(CFLAGS_EXTRA) -fno-pie
Pour la construction du noyau 4, l'indicateur ci-dessus est: KBUILD_CFLAGS
.
Et la compilation a recommencé.