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.

Edit:
Específicamente, estoy utilizando una máquina virtual Ubuntu en mi PC, intentando compilar un módulo de kernel Out-of-Tree que debería ejecutarse en BeagleBone Black.

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C M=$PWD

En el comando make, suelo tener que 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, 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 compilar el código fuente?
Tomemos como ejemplo:
– arm-linux-gnueabihf-
– aarch64-none-elf-
– arm-none-linux-gnueabihf

En todas las opciones anteriores, tenemos la arquitectura de la 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á implicada en la directiva CROSS_COMPILE=?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Los parámetros ARCH y CROSS_COMPILE cumplen diferentes funciones en el comando make al construir un módulo de kernel externo para una arquitectura de destino específica, como BeagleBone Black.

    El parámetro ARCH especifica la arquitectura de destino para la cual se está construyendo el módulo. Esto es necesario porque el kernel de Linux admite múltiples arquitecturas y, sin especificar la arquitectura de destino, el comando make puede intentar construir el módulo para la arquitectura del host en lugar de la arquitectura de destino.

    Por otro lado, el parámetro CROSS_COMPILE especifica el prefijo para el conjunto de herramientas que se utiliza para construir el módulo. Este prefijo indica qué versión del compilador y enlazador se debe utilizar para la compilación cruzada del módulo para la arquitectura de destino, que es diferente de la versión utilizada para compilar para la arquitectura del host.

    Por lo tanto, ambos parámetros ARCH y CROSS_COMPILE son necesarios en el comando make para garantizar que el módulo se construya correctamente para la arquitectura de destino prevista con el conjunto de herramientas adecuado. En resumen, especificar solo CROSS_COMPILE no es suficiente para construir el código fuente para la arquitectura de destino.

Comments are closed.