2011-05-11 23 views
39

Cuando construye una cadena de herramientas de gcc, existe la posibilidad de construirlo como brazo-elf o como brazo-ninguno-eabi, pero ¿cuál es la diferencia?arm gcc toolchain como arm-elf o arm-none-eabi, ¿cuál es la diferencia?

Uso el eabi hoy, pero eso es solo porque todos los demás parecen hacer eso ... pero ya que ese es un argumento realmente malo, sería realmente agradable entender la diferencia.

Nota: Esta cadena de herramientas combinará el código para Cortex-M3 basado en mcu: s como stm32.

Gracias


algunos enlaces:

EABI:

ELF:

+0

Para un uso menos integrado, consulte [debian] (http://wiki.debian.org/ArmHardFloatPort). –

+0

http://stackoverflow.com/a/13798214/1163019 – auselen

Respuesta

30

Cada arquitectura o pareja architecture/os tiene un ABI. ABI (Application binary Interface) describe cómo se deben llamar las funciones, números de syscalls, argumentos pasados, qué registros se pueden usar ...

El abi describe cómo el compilador debe generar el ensamblador.

Si usa solo el ensamblador, no necesita preocuparse por el ABI.

arm-elf y arm-none-eabi solo use dos versiones del brazo ABI. El eabi toolchain usa una revisión más nueva, pero también podría llamarse arm-elf-eabi, ya que también genera duende.

4

El ARM EABI es un estándar creado por ARM que permite que diferentes cadenas de herramientas creen objetos compatibles. Por ejemplo, para que una cadena de herramientas pueda vincular objetos creados por otra cadena de herramientas.

27

que yo sepa:

brazo-elf cadena de herramientas genera código obj por algún sistema operativo que apoyan la ejecución de formato ELF (ejemplo ABI para Linux). OS controlará la ejecución de su programa.

arm-none-eabi toolchain genera código obj para microcontroladores o microprocesadores (para bare metal, este será EABI - embedded ABI). Este código se descarga para limpiar el flash de MC y el núcleo de MC start ejecutándolo después del encendido. Sin sistema operativo, conjunto de comandos extendido, sin posibilidad de vincular con módulos compartidos.

23

Aquí es un excelente documento: https://community.freescale.com/thread/313490

cadenas de herramientas tienen una convención de nombres suelto como arco [-vendor] [-os] - EABI

arch - refers to target architecture (which in our case is ARM) 
    vendor - refers to toolchain supplier 
    os -  refers to the target operating system 
    eabi - refers to Embedded Application Binary Interface 

algunas ilustraciones de la siguiente manera:

arm-none-eabi - Esta cadena de herramientas se dirige a la arquitectura ARM, no tiene proveedor, no se dirige a un sistema operativo y cumple con ARM EABI.

arm-none-linux-gnueabi - Esta cadena de herramientas se dirige a la arquitectura ARM, no tiene proveedor, crea binarios que se ejecutan en el sistema operativo Linux, y usa la EABI de GNU. Se usa para apuntar a sistemas Linux basados ​​en ARM.

Cuestiones relacionadas