Relacionado a:
Não é possível compilar o kernel: erro, o kernel não suporta o modo PIC
Eu também tive esse problema, em vez de corrigir;
Configurei alternativas com uma versão diferente do gcc, pulei da v4 para a v5, está compilando agora.
$ 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
Que problemas podem surgir, existe alguma prática recomendada para escolher uma versão do GCC para compilar o kernel?
O sistema é o Debian Stretch.
Responder1
De acordo comdocumentação do kernel, você poderá usar qualquer versão do GCC começando com 3.2. Na prática, porém, não acho que versões mais antigas do GCC tendam a ser muito testadas com compilações de kernel, então é melhor usar versões mais recentes do GCC (mas não muito novas, há problemas com o GCC 6).
No Debian, você pode descobrir a versão apropriada do GCC olhando nopacote fonte do kerneldependências de compilação ou as dependências do pacote de cabeçalho do kernel. Por isso,linux-headers-4.7.0-1-amd64
depende delinux-compiler-gcc-5-x86
que dependegcc-5
.
Você pode recuperar o valor correto CC
automaticamente extraindo os valores de /usr/src/linux-headers-$(uname -r)/.kernelvariables
(após a instalação, linux-headers-$(uname -r)
se necessário). Por exemplo, meu sistema atualmente tem
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 isso CC
produzirá um kernel funcional (ou módulo para o kernel em execução), independentemente do GCC padrão (eu uso o GCC 6 como padrão).