Cómo construir un entorno de compilación cruzada para arm-linux
El entorno de compilación cruzada de Linux consta de las siguientes partes:
1. gcc, el compilador del sistema de destino
2. herramienta del sistema de destino
3. glibc, la biblioteca estándar del sistema de destino
4. El archivo de encabezado del kernel de Linux del sistema de destino
Pasos para configurar el entorno de compilación cruzada
I. Descargar el código fuente Descargar el código fuente Descargar el código fuente de binutils, gcc, glibc y el kernel de Linux (cabe tener en cuenta que las versiones de glibc y el código fuente del kernel deben ser los mismos que los realmente utilizados en la computadora de destino) y establezca las variables de shell PREFIX para especificar la ruta de instalación del programa ejecutable.
El primer paso es ejecutar el archivo de configuración, usar el parámetro --prefix=$PREFIX para especificar la ruta de instalación, usar el parámetro --target=arm-linux para especificar el tipo de destino y luego realice la instalación.
El tercer paso es configurar el archivo de encabezado del kernel de Linux.
Primero, ejecute make mrproper para limpiar y luego ejecute make config ARCH=arm (o make menuconfig/xconfig ARCH=arm) para la configuración (tenga en cuenta que ARCH=arm debe usarse en la línea de comando para especifique la arquitectura de la CPU porque la arquitectura predeterminada es la arquitectura de la CPU del host. Este paso requiere una configuración detallada basada en la situación real de la máquina de destino en el experimento del autor es la PDA ipaq-hp3630 de HP, por lo que el tipo de sistema se establece en SA11X0 y se selecciona Compaq iPAQ H3600/H3700 en la implementación de SA11X0. . p>
Una vez completada la configuración, debe copiar los archivos de encabezado del kernel al directorio de instalación: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include /linux $PREFIX/ arm-linux/include/linux
4. Compile gcc por primera vez
Primero ejecute el archivo de configuración, use el parámetro --prefix=$PREFIX para especifique la ruta de instalación y use --target=arm- El parámetro de Linux especifica el tipo de máquina de destino, use --disable-threads, --disable-shared y --enable-languages=c, y luego instale. Dado que compilar todo el gcc requiere la biblioteca glibc de la máquina de destino, que aún no existe, primero debe generar un gcc mínimo que compile solo la biblioteca glibc de la máquina de destino.
V. Compilación cruzada glibc
El código generado en este paso es para la CPU de destino, por lo que es un proceso de compilación cruzada. Este proceso utiliza el archivo de encabezado del kernel de Linux. La ruta predeterminada es $PREFIX/arm-linux/sys-linux, por lo que necesita crear un enlace suave llamado sys-linux en $PREFIX/arm-linux para que su archivo de encabezado del kernel sea. ubicado en el directorio de inclusión; alternativamente, puede usar -configure en el siguiente comando que se ejecutará.
Los parámetros de tiempo de ejecución de configure se establecen de la siguiente manera (dado que se trata de una compilación cruzada, la variable del compilador CC se establece en arm-linux-gcc): CC=arm-linux-gcc ./configure -- prefix= $PREFIX/arm-linux --host=arm-linux --enable-add-ons Finalmente, ejecute configure y make install de acuerdo con la configuración anterior, y se completará el proceso de compilación cruzada de glibc. Cabe señalar que la ruta de instalación de glibc está configurada en $PREFIXARCH=arm/arm-linux. Si la configuración es incorrecta, es posible que los archivos de encabezado y las bibliotecas de glibc no se encuentren cuando se compila gcc por segunda vez.
Sexto, compila gcc por segunda vez
Utilice --prefix=$PREFIX --target=arm-linux -enable-languages=c, c para ejecutar configure.
Ejecute make install.
Ahora se ha completado todo el entorno de compilación cruzada.
Algunas notas
En primer lugar, gcc puede tener un error que no puede encontrar stdio.h al compilar por primera vez. La solución es modificar gcc/config/arm/. t-linux, agregue -Dinhibit_libc y -D___libc y -D__gthr_posix_h a la configuración de la variable TARGET_LIBGCC2_CFLAGS.