Welche Konsequenzen können sich aus der Verwendung einer anderen GCC-Version zum Kompilieren des Kernels ergeben?

Welche Konsequenzen können sich aus der Verwendung einer anderen GCC-Version zum Kompilieren des Kernels ergeben?

Bezüglich:

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

Ich hatte auch gerade dieses Problem, anstatt einen Patch zu installieren;

Ich habe Alternativen mit einer anderen GCC-Version konfiguriert, bin von Version 4 auf Version 5 gesprungen und werde jetzt kompiliert.

$ update-alternatives --config gcc
There are 3 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-6     30        auto mode
  1            /usr/bin/gcc-4.8   10        manual mode
* 2            /usr/bin/gcc-5     20        manual mode
  3            /usr/bin/gcc-6     30        manual mode

Welche Probleme könnten auftreten und gibt es bewährte Methoden für die Auswahl einer GCC-Version zum Kompilieren des Kernels?

Das System ist Debian Stretch.

Antwort1

Entsprechend derKernel-Dokumentation, sollten Sie jede Version von GCC ab 3.2 verwenden können. In der Praxis glaube ich allerdings nicht, dass ältere Versionen von GCC viel mit Kernel-Builds getestet werden, daher sind Sie mit neueren Versionen von GCC besser bedient (aber nicht zu neu, es gibt Probleme mit GCC 6).

In Debian können Sie die entsprechende Version von GCC herausfinden, indem Sie sich dieKernel-Quellpaketoder die Abhängigkeiten des Kernel-Header-Pakets.linux-headers-4.7.0-1-amd64kommt drauf anlinux-compiler-gcc-5-x86Das hängt davon abgcc-5.

Sie können den korrekten Wert von automatisch abrufen, indem Sie die Werte von (nach der Installation, falls erforderlich) CCabrufen . Beispielsweise hat mein System derzeit/usr/src/linux-headers-$(uname -r)/.kernelvariableslinux-headers-$(uname -r)

override ARCH = x86
override KERNELRELEASE = 4.7.0-1-amd64
CCACHE = ccache
CC = $(if $(DEBIAN_KERNEL_USE_CCACHE),$(CCACHE)) $(CROSS_COMPILE)gcc-5
ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
override CROSS_COMPILE = $(DEB_HOST_GNU_TYPE)-
endif

Dadurch CCwird ein funktionierender Kernel (oder ein Modul für den laufenden Kernel) erstellt, unabhängig vom Standard-GCC (ich verwende GCC 6 als Standard).

verwandte Informationen