No se puede compilar el núcleo: error, el núcleo no admite el modo PIC

8

Tengo problemas para recompilar mi Kernel. Descargando el paquete fuente, descomprímalo y ejecute

fakeroot make-kpkg kernel_image  

me lleva al error

               [...]

  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

El problema puede resolverse cambiando la configuración del kernel obtenida con make menuconfig.

Cómo deshacerse de este error y tener una compilación exitosa

usuario123456
fuente
Ese pastel no tiene nada que ver con tu problema. ¿Qué versiones exactas de distribución y paquete está utilizando? ¿Qué versión de make y gcc? ¿Sobre qué arquitectura?
Gilles 'SO- deja de ser malvado'
uname -ame da Linux hostname 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux y la versión gcc es gcc (Debian 6.2.0-9) 6.2.0 20161019. He seguido esas indicaciones precisas.
usuario123456

Respuestas:

7

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

puedes probar el siguiente parche:

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 :=

Un par de entradas debian relacionadas:

Y otra parafenilia:

Raymond Burkholder
fuente
¿Cómo se aplica este parche? Consulte también mi pregunta relacionada sobre la compilación del controlador Intel e1000e, que da el mismo error: 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 parchear archivo Makefile parche: **** parche mal formado en la línea 7: todos: vmlinux
Amedee Van Gasse
Para el parche que muestro arriba, esto debe aplicarse al Makefile en el directorio de Linux. Por ejemplo, después de descargar cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.15.tar.xz y expandir la fuente, cambie a linux-4.8.15, y debería haber un Makefile allí. El parche anterior se aplica a ese Makefile, o simplemente edita manualmente el archivo (yo uso sed para aplicar el cambio). Otra nota: las banderas son necesarias con gcc6 pero no con gcc5.
Raymond Burkholder el
Utilizo lo siguiente para mis compilaciones de kernel: github.com/rburkholder/vagrant/blob/master/bldkrnlpkg/… en debian / stretch
Raymond Burkholder el