Não é possível compilar o kernel: erro, o kernel não suporta o modo PIC

8

Tenho problemas ao recompilar meu Kernel. Fazendo o download do pacote de origem, descompacte-o e execute

fakeroot make-kpkg kernel_image  

me leva ao erro

               [...]

  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
  CHK     include/generated/package.h
  UPD     include/generated/package.h
  CC      kernel/bounds.s
kernel/bounds.c:1:0: error: code model kernel does not support PIC mode

O problema pode ser resolvido alterando a configuração do Kernel obtida com make menuconfig.

Como se livrar desse erro e ter uma compilação bem-sucedida

user123456
fonte
Essa TORTA não tem nada a ver com o seu problema. Quais versões exatas de distribuição e pacote você está usando? Qual versão do make e gcc? Em que arquitetura?
Gilles 'SO- stop be evil'
uname -ame dá Linux hostname 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux e versão gcc é gcc (Debian 6.2.0-9) 6.2.0 20161019. Eu segui essas indicações precisas.
user123456

Respostas:

7

Em http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.8-rc2/0002-UBUNTU-SAUCE-no-up-disable-pie-when-gcc-has-it-enabl.patch

você pode tentar o seguinte patch:

diff --git a/Makefile b/Makefile
index 5c18baa..e342473 100644
--- a/Makefile
+++ b/Makefile
@@ -612,6 +612,12 @@ endif # $(dot-config)
# Defaults to vmlinux, but the arch makefile usually adds further targets
all: vmlinux

+# force no-pie for distro compilers that enable pie by default
+KBUILD_CFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CFLAGS += $(call cc-option, -no-pie)
+KBUILD_AFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CPPFLAGS += $(call cc-option, -fno-pie) 

# The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default
# values of the respective KBUILD_* variables
ARCH_CPPFLAGS :=

Alguns tickets debian relacionados:

E outra parafenilia:

Raymond Burkholder
fonte
Como se aplica esse patch? Veja também minha pergunta relacionada sobre a compilação do driver Intel e1000e, que fornece o mesmo erro: askubuntu.com/questions/851721/…
Amedee Van Gasse
/usr/src/linux-headers-4.8.0-27/arch/x86$ cat ~ / e1000e-3.3.4 / disable-pie.patch | sudo patch -p1 patching arquivo Makefile patch: **** patch malformado na linha 7: all: vmlinux
Amedee Van Gasse
Para o patch que mostro acima, isso deve ser aplicado ao Makefile no diretório linux. Por exemplo, após baixar o cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.15.tar.xz e expandir a fonte, mude para linux-4.8.15 e deve haver um Makefile há. O patch acima é aplicado a esse Makefile, ou apenas edite manualmente o arquivo (eu uso sed para aplicar a alteração). Outra observação: os sinalizadores são necessários no gcc6, mas não no gcc5.
Raymond Burkholder
Eu uso o seguinte para o meu construções de kernel: github.com/rburkholder/vagrant/blob/master/bldkrnlpkg/... no debian / stretch
Raymond Burkholder