O Kernel não suporta o modo PIC para compilar?

3

Eu tenho tentado compilar o kernel mais recente do Linux v4.8.9 no Ubuntu 16.10 e este erro continua aparecendo depois que eu fiz o padrão .config, modifiquei com o menuconfig e executei o make por si mesmo. Eu também executei make mrproper assim que eu descompactei o arquivo. Esta é a saída logo após eu executar make:

scripts/kconfig/conf  --silentoldconfig Kconfig
  SYSTBL  arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/asm/unistd_32_ia32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/asm/unistd_64_x32.h
  SYSTBL  arch/x86/entry/syscalls/../../include/generated/asm/syscalls_64.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/entry/syscalls/../../include/generated/uapi/asm/unistd_x32.h
  HOSTCC  arch/x86/tools/relocs_32.o
  HOSTCC  arch/x86/tools/relocs_64.o
  HOSTCC  arch/x86/tools/relocs_common.o
  HOSTLD  arch/x86/tools/relocs
  CHK     include/config/kernel.release
  UPD     include/config/kernel.release
  WRAP    arch/x86/include/generated/asm/clkdev.h
  WRAP    arch/x86/include/generated/asm/cputime.h
  WRAP    arch/x86/include/generated/asm/dma-contiguous.h
  WRAP    arch/x86/include/generated/asm/early_ioremap.h
  WRAP    arch/x86/include/generated/asm/mcs_spinlock.h
  WRAP    arch/x86/include/generated/asm/mm-arch-hooks.h
  CHK     include/generated/uapi/linux/version.h
  UPD     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
  CC      kernel/bounds.s
kernel/bounds.c:1:0: error: code model kernel does not support PIC mode
 /*

Kbuild:45: recipe for target 'kernel/bounds.s' failed
make[1]: *** [kernel/bounds.s] Error 1
Makefile:1015: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2

Eu também tentei compilar com a opção -no-pie após o comando make, mas ele renderiza um conjunto de novos erros, constantemente dizendo que há "alvos perdidos". Eu tenho o gcc versão 6.2.0. Eu também tenho o gcc-5 instalado porque eu supus no início que poderia ser porque o gcc era muito novo, mas o mesmo problema persiste no gcc-5. Alguém nas listas de discussão ou em outro fórum mencionou que o problema foi resolvido clonando diretamente do git, mas isso não ajudou em meu cenário.

Estou curioso para saber se alguém já se deparou com este problema e, em caso afirmativo, que possível correção poderia ser?

NOTA: Estou executando o Ubuntu no Virtualbox em um Mac, se isso pode ser uma possível fonte de problemas.

    
por Dioxin 20.11.2016 / 07:45

2 respostas

6

O problema é com a sua instalação do gcc, no gcc 6+ versões PIE (executáveis independentes de posição) é ativada por padrão. Então, para compilar você precisa desativá-lo. Até mesmo o gcc 5 tem o problema. Este é um bug conhecido do gcc. Bug Link .

Até agora não há nenhum patch oficial do lado do gcc, então a solução é corrigir o Makefile da fonte do kernel.

Se você estiver familiarizado com o patch do arquivo de origem, use os códigos deste link para criar o arquivo de correção e, em seguida, tente compilar. Arquivo de patch

Deixe-me saber se você está com dificuldades para instalar o patch.

    
por Joy 21.11.2016 / 02:45
0

Abra o Makefile, procure CFLAGS_EXTRA e adicione a seguinte opção a ele -fno-pie

Eu tinha a linha:

EXTRA_CFLAGS += $(CFLAGS_EXTRA)

Eu mudei para:

EXTRA_CFLAGS += $(CFLAGS_EXTRA) -fno-pie

E começou a compilar novamente.

    
por Natim 26.01.2018 / 10:22