it-swarm.com.de

Kernel unterstützt keinen PIC-Modus zum Kompilieren?

Ich habe versucht, den neuesten Linux v4.8.9-Kernel unter Ubuntu 16.10 zu kompilieren, und dieser Fehler taucht immer wieder auf, nachdem ich die Standard-.config-Datei erstellt, sie mit menuconfig geändert und make von selbst ausgeführt habe. Ich habe auch make mrproper ausgeführt, sobald ich die Datei entpackt habe. Dies ist die Ausgabe direkt nach dem Ausführen von 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

Ich habe auch versucht, mit der Option -no-pie nach dem Befehl make zu kompilieren, aber es werden eine Reihe neuer Fehler ausgegeben, die ständig darauf hinweisen, dass "Ziele fehlen". Ich habe gcc Version 6.2.0. Ich habe auch gcc-5 installiert, weil ich anfangs angenommen habe, dass es vielleicht daran liegt, dass gcc zu neu ist, aber das gleiche Problem in gcc-5 besteht. Jemand in den Mailinglisten oder in einem anderen Forum erwähnte, dass das Problem durch direktes Klonen von Git behoben wurde, aber das half auch in meinem Szenario nicht.

Ich bin gespannt, ob jemand anderes auf dieses Problem gestoßen ist, und wenn ja, was für eine mögliche Lösung könnte das sein?

HINWEIS: Ich verwende Ubuntu in Virtualbox auf einem Mac, wenn dies eine mögliche Ursache für Probleme sein könnte.

11
John Long

Das Problem liegt in Ihrer gcc-Installation. In den gcc 6+ -Versionen ist PIE (position independent executables) standardmäßig aktiviert. Um es zu kompilieren, müssen Sie es deaktivieren. Sogar gcc 5 hat das Problem. Dies ist ein bekannter Fehler für gcc. Bug Link .

Bisher gibt es keinen offiziellen Patch von gcc-Seite, daher besteht die Problemumgehung darin, das Makefile der Kernelquelle zu patchen.

Wenn Sie mit dem Patchen der Quelldatei vertraut sind, verwenden Sie die Codes aus diesem Link, um die Patchdatei zu erstellen, und versuchen Sie dann zu kompilieren. Patchdatei

Lassen Sie mich wissen, wenn Sie Probleme bei der Installation des Patches haben.

10
Joy

Öffnen Sie das Makefile, suchen Sie nach CFLAGS_EXTRA und fügen Sie die folgende Option hinzu -fno-pie

Ich hatte die leitung:

EXTRA_CFLAGS += $(CFLAGS_EXTRA)

Ich habe es geändert für:

EXTRA_CFLAGS += $(CFLAGS_EXTRA) -fno-pie

Für das Erstellen von Kernel 4 lautet das Flag über dem Flag: KBUILD_CFLAGS.

Und es fing wieder an zu kompilieren.

4
Natim