Quali conseguenze possono derivare dall'utilizzo di una versione GCC alternativa per compilare il kernel? [chiuso]


0

Correlato a:

Impossibile compilare il kernel: errore, il kernel non supporta la modalità PIC

Ho anche avuto questo problema, invece di patching;

Ho configurato le alternative con una versione gcc diversa, passata da v4 a v5, ora è in fase di compilazione.

$ 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

Quali problemi potrebbero sorgere, esistono delle migliori pratiche per scegliere una versione di GCC per compilare il kernel?

Il sistema è Debian Stretch.


Vedi ad esempio la discussione su StackOverflow .
Thomas Dickey,

voglio usare gcc, quell'articolo riguarda l'uso di qualcosa di diverso da gcc.
mikejonesey,

Risposte:


3

Secondo la documentazione del kernel , dovresti essere in grado di utilizzare qualsiasi versione di GCC a partire dalla 3.2. In pratica, tuttavia, non penso che le versioni precedenti di GCC tendano a essere testate molto con le build del kernel, quindi è meglio usare le versioni più recenti di GCC (ma non troppo nuove, ci sono problemi con GCC 6).

In Debian, puoi scoprire la versione appropriata di GCC guardando le dipendenze di compilazione del pacchetto sorgente del kernel o le dipendenze del pacchetto di intestazione del kernel. Quindi, linux-headers-4.7.0-1-amd64dipende da linux-compiler-gcc-5-x86quale dipende gcc-5.

È possibile recuperare automaticamente il valore corretto CCestraendo i valori da /usr/src/linux-headers-$(uname -r)/.kernelvariables(dopo l'installazione linux-headers-$(uname -r)se necessario). Ad esempio, il mio sistema attualmente ha

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

L'uso di questo CCprodurrà un kernel funzionante (o un modulo per il kernel in esecuzione) indipendentemente dal GCC predefinito (io uso GCC 6 come predefinito).


non usando i kernel del sistema operativo, ma sono ottime informazioni. Una cosa particolare che ero interessato a sapere sarebbe se una libreria di sistema avesse una sorta di incompatibilità avendo compilato il kernel con la v5, ma se il kernel del sistema operativo sta usando la v5, credo di no.
mikejonesey,

No, non dovrebbero esserci incompatibilità tra il kernel e le librerie di sistema (se ci fosse, sarebbe un bug, del tipo che verrebbe risolto piuttosto rapidamente).
Stephen Kitt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.