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-amd64
depende delinux-compiler-gcc-5-x86
que depende degcc-5
.
Puede recuperar el valor correcto de CC
automá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 CC
producirá un kernel funcional (o módulo para el kernel en ejecución) independientemente del GCC predeterminado (yo uso GCC 6 como predeterminado).