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-amd64
kommt drauf anlinux-compiler-gcc-5-x86
Das hängt davon abgcc-5
.
Sie können den korrekten Wert von automatisch abrufen, indem Sie die Werte von (nach der Installation, falls erforderlich) CC
abrufen . Beispielsweise hat mein System derzeit/usr/src/linux-headers-$(uname -r)/.kernelvariables
linux-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 CC
wird ein funktionierender Kernel (oder ein Modul für den laufenden Kernel) erstellt, unabhängig vom Standard-GCC (ich verwende GCC 6 als Standard).