arm gcc-arm-none-eabi - bras gcc toolchain comme bras-elfe ou bras-aucun-eabi, quelle est la différence?




install eclipse (5)

Comme je le sais:

La chaîne d'outils arm-elf génère un code obj pour certains systèmes d'exploitation qui supportent l'exécution du format elf (exemple ABI linux). OS contrôlera l'exécution de votre programme.

arm-none-eabi toolchain génère un code obj pour les micro-contrôleurs ou les microprocesseurs (pour le bare metal, ce sera l'ABI embarqué EABI). Ce code est téléchargé pour nettoyer le flash de MC et le noyau de MC commence à l'exécuter après la mise sous tension. Pas de système d'exploitation, ensemble de commandes étendu, aucune possibilité de liaison avec des modules partagés.

Lorsque vous construisez une chaîne d'outils gcc, il est possible de la construire en tant que bras-elfe ou en tant que bras-aucun-eabi, mais quelle est la différence?

J'utilise l'eabi aujourd'hui, mais c'est juste que tout le monde semble le faire ... mais comme c'est un très mauvais argument, ce serait vraiment bien de comprendre la différence.

Note: Cette chaîne d'outils va croiser le code pour les mcu: s basés sur Cortex-M3 comme le stm32.

Merci

Quelques liens :

EABI:

ELFE:


Chaque architecture ou architecture / couple a un ABI. L'ABI (Application binary Interface) décrit comment les fonctions doivent être appelées, les numéros syscalls, les arguments passés, quels registres peuvent être utilisés ...

L'abi décrit comment le compilateur doit générer l'assembleur.

Si vous utilisez uniquement un assembleur, vous n'avez pas besoin de vous préoccuper de l'ABI.

arm-elf et arm-none-eabi utilisent juste deux versions du bras ABI. La chaîne d'outils eabi utilise une révision plus récente, mais pourrait également s'appeler bras-elf-eabi, car elle génère aussi des elfes.


L'ARM EABI est une norme créée par ARM qui permet à différentes chaînes d'outils de créer des objets compatibles. Par exemple, pour qu'une chaîne d'outils puisse lier des objets créés par une autre chaîne d'outils.


Voici un excellent doc: https://community.freescale.com/thread/313490

Les chaînes d'outils ont une convention de nom libre comme arch [-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

quelques illustrations comme suit:

arm-none-eabi - Cette chaîne d'outils cible l'architecture ARM, n'a pas de fournisseur, ne cible pas un système d'exploitation et est conforme à l'EABI ARM.

arm-none-linux-gnueabi - Cette chaîne d'outils cible l'architecture ARM, n'a aucun fournisseur, crée des binaires qui s'exécutent sur le système d'exploitation Linux et utilise l'EABI GNU. Il est utilisé pour cibler les systèmes Linux basés sur ARM.


GCC: Collection de compilateurs GNU

  • Référents vers toutes les langues supportées par le compilateur GNU.

gcc: compilateur GNU C
g ++: compilateur GNU C ++

Les principales différences

  1. gcc compilera: * .c / *. cpp comme C et C ++ respectivement.
  2. g ++ compilera: * .c / *. cpp mais ils seront tous traités comme des fichiers C ++.
  3. De plus, si vous utilisez g ++ pour lier les fichiers d'objets, il se connecte automatiquement dans les bibliothèques std C ++ (gcc ne le fait pas).
  4. gcc compiler les fichiers C a moins de macros prédéfinies.
  5. gcc compiler * .cpp et g ++ compiler * .c / *. cpp a quelques macros supplémentaires.

Macros supplémentaires lors de la compilation de fichiers * .cpp:

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern




gcc arm elf cortex-m3 eabi