GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿es necesario compilar el kernel en el mismo entorno de desarrollo que el espacio de usuario?

Digamos que mi espacio de usuario (paquetes) está compilado con gcc 4.7 y libc6 2.13 (Debian Wheezy)

¿Puedo compilar el kernel de Linux en un entorno de desarrollo diferente, como gcc 6.3? y libc6 2.24 (es decir, bajo Debian Stretch) ?

Sé que, a diferencia de los paquetes, el kernel no está vinculado con ninguna biblioteca dinámica. Entonces, teóricamente, no debería hacer ninguna diferencia qué gcc y libc fue compilado bajo.

¿Es esto cierto?
¿Podría tener problemas cuando hago esto?
¿Podría haber algunas incompatibilidades causadas por diferentes gcc versiones?

Por otro lado, el nuevo gcc tiene algunas características interesantes, mejor seguridad. Entonces, tal vez, el kernel debería compilarse con el gcc más reciente ?

Respuesta aceptada:

Como señala, la biblioteca C que se utiliza no tiene impacto en el kernel, el kernel no usa la biblioteca C. (Hay un impacto indirecto, ya que se usa para construir herramientas que el kernel usa durante su proceso de construcción, pero es muy poco probable que eso afecte el resultado final).

El núcleo se puede construir con una variedad de versiones de compilador diferentes; según su documentación, solo necesita GCC 3.2 o posterior. También encontrará que puede tomar un tiempo para que el núcleo sea compatible oficialmente con las últimas versiones de GCC, y aún más para que un núcleo de distribución lo use. Por ejemplo, el paquete del kernel de Debian Linux usa GCC 6 e incluso tiene paquetes dedicados para proporcionar la versión correcta del compilador (linux-compiler-gcc-6-x86 en amd64 y i386 ). No hay conexión entre el compilador usado para el kernel y el compilador usado para el espacio de usuario (ni hay necesariamente ninguna necesidad de usar el mismo compilador para todo el espacio de usuario; los programas antiguos construidos con GCC 3 o incluso 2 todavía funcionan en sistemas modernos).

Las versiones más recientes del compilador brindan más funciones de seguridad, pero GCC 6 es lo suficientemente bueno para la mayoría, si no para todas, las funciones de seguridad utilizadas en el kernel.


Linux
  1. ¿Linux necesita una limpieza ocasional?

  2. ¿Qué tan portátiles son /dev/stdin, /dev/stdout y /dev/stderr?

  3. Linux:¿Qué significa la letra 'u' en /dev/urandom?

  4. ¿Qué significa decir que el kernel de Linux es preventivo?

  5. Llame a una función de espacio de usuario desde un módulo del kernel de Linux

Falta de referencia del puntero NULL del kernel de Linux en memset de kzalloc

¿Cómo se compara la línea de comandos de Mac con Linux?

¿Por qué Linux enumera las unidades NVMe como /dev/nvme0 en lugar de /dev/sda?

¿Cuál es el beneficio de compilar su propio kernel de Linux?

Linux:diferencia entre /dev/console, /dev/tty y /dev/tty0

¿Necesito reiniciar el servidor después de una actualización del kernel de Linux?