es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué tener ARCH= cuando ya tenemos CROSS_COMPILE=?

Esta pregunta puede parecer obvia para algunos de ustedes, pero para mí parece ser una pieza faltante que necesito para entender el panorama.

Editar: Específicamente, estoy usando una máquina virtual de Ubuntu en mi PC e intento construir un módulo de kernel Out-of-Tree que debería funcionar en BeagleBone Black.

En el comando make, generalmente necesito ingresar los siguientes 2 parámetros:

  1. ARCH=
  2. CROSS_COMPILE=

Para mí, “1” parece ser información redundante que solo agrega complejidad al comando make.

Por supuesto, hay una razón sólida para usar ambos, y he intentado buscar en muchos foros y sitios web, pero no pude encontrar una “respuesta para principiantes” – supongo que esto es lo que estoy buscando.

Entonces, mi pregunta es: ¿No es suficiente especificar CROSS_COMPILE= para construir el código fuente? Tomando, por ejemplo:
– arm-linux-gnueabihf-
– aarch64-none-elf-
– arm-none-linux-gnueabihf

En todas las opciones anteriores, tenemos la arquitectura de CPU objetivo, que es arm o aarch64 (que también es arm64).

Entonces, ¿por qué necesitamos una directiva específica como ARCH= si la arquitectura ya está implícita en la directiva CROSS_COMPILE=?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El parámetro ARCH= en el comando make especifica la arquitectura objetivo para la cual se está construyendo el núcleo o el módulo del núcleo. Se utiliza para seleccionar el compilador, enlazador y otras herramientas apropiadas necesarias para construir el código para esa arquitectura. Por otro lado, el parámetro CROSS_COMPILE= especifica el prefijo para el compilador cruzado utilizado para construir el código. Se utiliza para garantizar que se utilice el compilador correcto al construir para una arquitectura diferente a la del equipo anfitrión.

    En resumen, el parámetro ARCH= y el parámetro CROSS_COMPILE= cumplen diferentes propósitos y ambos son necesarios para construir módulos del núcleo que se ejecutarán en un dispositivo objetivo con una arquitectura diferente a la del equipo anfitrión. Simplemente especificar el parámetro CROSS_COMPILE= no es suficiente para garantizar que el código se construya correctamente para la arquitectura objetivo.

Comments are closed.