¿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:
- ARCH=
- 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=?
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.