¿Qué consecuencias pueden surgir del uso de una versión alternativa de GCC para compilar el kernel?

¿Qué consecuencias pueden surgir del uso de una versión alternativa de GCC para compilar el kernel?

Relacionado con:

No se puede compilar el kernel: error, el kernel no admite el modo PIC

También tuve este problema, en lugar de parchear;

Configuré alternativas con una versión de gcc diferente, salté de v4 a v5, se está compilando ahora.

$ 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

¿Qué problemas podrían surgir? ¿Existe alguna práctica recomendada para elegir una versión de GCC para compilar el kernel?

El sistema es Debian Stretch.

Respuesta1

De acuerdo con ladocumentación del núcleo, debería poder utilizar cualquier versión de GCC a partir de la 3.2. Sin embargo, en la práctica, no creo que las versiones anteriores de GCC tiendan a probarse mucho con compilaciones del kernel, por lo que es mejor usar versiones más nuevas de GCC (pero no demasiado nuevas, hay problemas con GCC 6).

En Debian, puede encontrar la versión apropiada de GCC consultando lapaquete fuente del núcleoLas dependencias de compilación o las dependencias del paquete de encabezado del kernel. De este modo,linux-headers-4.7.0-1-amd64depende delinux-compiler-gcc-5-x86que depende degcc-5.

Puede recuperar el valor correcto de CCautomáticamente ingresando los valores de /usr/src/linux-headers-$(uname -r)/.kernelvariables(después de la instalación linux-headers-$(uname -r)si es necesario). Por ejemplo, mi sistema actualmente tiene

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

Usar esto CCproducirá un kernel funcional (o módulo para el kernel en ejecución) independientemente del GCC predeterminado (yo uso GCC 6 como predeterminado).

información relacionada