Diferencias entre versiones de compiladores cruzados de la serie arm

Reglas de nomenclatura de compiladores cruzados

Reglas de nomenclatura para compiladores cruzados: arch [-vendor] [-os] [-(gnu)eabi] [-language]

  • arch - arquitectura, como arm (ARM-32bit), aarch64 (ARM-64bit), x86, etc.;
  • proveedor: el proveedor de la cadena de herramientas, a menudo omitido o reemplazado por ninguno;
  • os: el sistema operativo de destino, como Linux, si no hay un sistema operativo específico, use ninguno en su lugar. Además, ningún proveedor y sistema operativo usan ninguno en su lugar.
  • eabi - Interfaz binaria de aplicación integrada
  • lenguaje - lenguaje compilado, como gcc, g++

Ejemplos de compiladores específicos

Muestras de herramientas de compilación cruzada crosstool-ng

El sitio web oficial de crosstool-ng, que crea la cadena de herramientas de compilación cruzada, enumera muchos ejemplos de herramientas de compilación cruzada , todas las cuales se nombran de acuerdo con las reglas de nomenclatura anteriores.

aarch64-ol7u9-linux-gnu
aarch64-ol8u6-linux-gnu
aarch64-ol8u7-linux-gnu
aarch64-rpi3-linux-gnu
aarch64-rpi4-linux-gnu
aarch64-unknown-linux-gnu
aarch64-unknown-linux-uclibc
arm-bare_newlib_cortex_m3_nommu-eabi
arm-cortex_a15-linux-gnueabihf
arm-cortexa5-linux-uclibcgnueabihf
arm-cortex_a8-linux-gnueabi
arm-cortexa9_neon-linux-gnueabihf
arm-multilib-linux-uclibcgnueabi
arm-nano-eabi
arm-none-eabi
arm-ol7u9-linux-gnueabi
arm-ol7u9-linux-gnueabihf
arm-picolibc-eabi
arm-unknown-eabi
arm-unknown-linux-gnueabi
arm-unknown-linux-musleabi
arm-unknown-linux-uclibcgnueabi
arm-unknown-linux-uclibcgnueabihf
x86_64-centos7-linux-gnu
x86_64-multilib-linux-gnu
x86_64-multilib-linux-musl
x86_64-multilib-linux-uclibc
x86_64-multilib-linux-uclibc,moxie-unknown-moxiebox
x86_64-multilib-linux-uclibc,powerpc-unknown-elf
x86_64-ol8u6-linux-gnu
x86_64-ol8u7-linux-gnu
x86_64-pc-linux-gnu,arm-picolibc-eabi
x86_64-ubuntu14.04-linux-gnu
x86_64-ubuntu16.04-linux-gnu
x86_64-unknown-linux-gnu
x86_64-unknown-linux-uclibc
x86_64-w64-mingw32
x86_64-w64-mingw32,arm-cortexa9_neon-linux-gnueabihf
x86_64-w64-mingw32,x86_64-pc-linux-gnu

Ejemplo de compilador cruzado de brazo

  • brazo-ninguno-eabi-gcc

Arquitectura ARM, sin proveedor, no se dirige a un sistema operativo, cumple con ARM EABI (ARM 程序接口)

Se utiliza para compilar el sistema bare-metal de la arquitectura ARM (incluido el arranque y el kernel ARM Linux, no apto para compilar aplicaciones Linux), generalmente se utiliza para chips de la serie ARM MCU, como ARM7, Cortex-M y Cortex-R, no sistema operativo, sin soporte Las funciones que están estrechamente relacionadas con el sistema operativo utilizan newlib, una biblioteca C dedicada a los sistemas integrados, el método de instalación:

sudo apt-get install gcc-arm-none-eabi
  • brazo-linux-gnueabi-gcc

Arquitectura ARM, crea archivos binarios que se ejecutan en el sistema operativo Linux y utiliza GNU EABI (GUN 程序接口)

También llamado arm-none-linux-gnueabi-gcc, porque no había un editor al principio, actualmente lo emite Linaro y generalmente se usa para chips de la serie ARM9, ARM11, Arm Cortex-A con un sistema operativo Linux. El primero es para chips de 32 bits y el segundo es para chips de 64 bits, utilizando la biblioteca glibc. Se puede usar para compilar de forma cruzada el código de todos los enlaces en el sistema ARM, incluidos los programas completos, u-boot, el kernel de Linux, el sistema de archivos y las aplicaciones de App. Método de instalación:

sudo apt-get install gcc-arm-linux-gnueabi
  • brazo-linux-gnueabihf-gcc

La diferencia con arm-linux-gnueabi-gcc es que el valor predeterminado de la opción gcc -mfloat-abi es diferente, es decir, el procesamiento del número de punto flotante es diferente, consulte la respuesta a continuación para obtener más detalles.
• aarch64-none-linux-gnu-gcc

Es la versión ARM-64bit de arm-linux-gnueabi-gcc y arm-linux-gnueabihf-gcc.

  • brazo-eabi-gcc

Compilador Android ARM.

  • brazo-ninguno-uclinuxeabi-gcc

Para uCLinux, use glibc.

  • brazo-ninguno-symbianelf-gcc

para simbian

varios conceptos

ABI más EABI

ABI: Interfaz Binaria de Aplicación (Application Binary Interface). En informática, una interfaz binaria de aplicación describe la interfaz de bajo nivel entre una aplicación (u otro tipo) y el sistema operativo u otras aplicaciones;

EABI: Embedded ABI, la interfaz de programa de aplicación binaria (Embeded Application Binary Interface) aplicada a sistemas integrados.

La principal diferencia entre los dos es que ABI está en la computadora y EABI está en la plataforma integrada (como ARM, MIPS, etc.).

gnueabi y gnueabihf

gcc-arm-linux-gnueabi: el compilador GNU C para la arquitectura armel
gcc-arm-linux-gnueabihf: el compilador GNU C para la arquitectura armhf

Estos dos compiladores cruzados son adecuados para dos arquitecturas diferentes de armel y armhf.Las dos arquitecturas de armel y armhf adoptan diferentes estrategias para operaciones de punto flotante (arm con fpu puede soportar estas dos estrategias de operación de punto flotante).

De hecho, estos dos compiladores cruzados son solo valores predeterminados diferentes de la opción gcc -mfloat-abi. La opción gcc -mfloat-abi tiene tres valores: soft, softfp y hard (los dos últimos requieren una unidad de coma flotante fpu en el brazo, y soft es compatible con los dos últimos, pero softfp y hard son incompatibles entre sí .):

suave: no use fpu para cálculos de punto flotante, incluso si hay una unidad de punto flotante fpu, pero use el modo de software.

softfp: El valor predeterminado adoptado por la arquitectura armel (el compilador correspondiente es gcc-arm-linux-gnueabi), que es calculado por fpu, pero los parámetros son pasados ​​por registros ordinarios, por lo que al interrumpir, solo se necesitan registros ordinarios. guardado, y la carga de interrupción es pequeña.Pero los parámetros deben convertirse a punto flotante para volver a calcular.

duro: el valor predeterminado adoptado por la arquitectura armhf (el compilador correspondiente gcc-arm-linux-gnueabihf), calculado por fpu, y los parámetros también pasan por los registros de coma flotante en fpu, lo que guarda la conversión y tiene la mejor rendimiento, pero la interrupción de carga alta.

referencia

Supongo que te gusta

Origin blog.csdn.net/benkaoya/article/details/129542585
Recomendado
Clasificación