web-dev-qa-db-fra.com

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

Lorsque vous créez 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 le 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 sympa de comprendre la différence.

Remarque: Cette chaîne d'outils compilera de manière croisée du code pour des UC basées sur Cortex-M3 comme le stm32.

Merci


Quelques liens :

EABI:

ELFE:

47
Johan

Chaque architecture ou couple architecture/os possède un ABI. L'ABI (Application binary Interface) décrit comment les fonctions doivent être appelées, les numéros de 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 l'assembleur, vous n'avez pas besoin de vous soucier de l'ABI.

arm-elf et arm-none-eabi utilisent simplement deux versions du bras ABI. La chaîne d'outils eabi utilise une révision plus récente, mais pourrait également être appelée arm-elf-eabi, car elle génère également elf.

37
paul

Ici est une excellente explication.

Les chaînes d'outils suivent la convention de dénomination lâche: 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 exemples:

arm-none-eabi: cette chaîne d'outils cible l'architecture ARM, n'a pas de fournisseur, ne cible aucun système d'exploitation et est conforme à la norme ARM EABI).

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

35
zhigang

Comme je le sais:

arm-elf la chaîne d'outils génère du code obj pour certains systèmes d'exploitation qui prennent en charge l'exécution du format elf (par exemple linux ABI). Le système d'exploitation contrôlera l'exécution de votre programme.

arm-none-eabi la chaîne d'outils génère du code obj pour les microcontrôleurs ou les microprocesseurs (pour le métal nu, ce sera ABI intégré 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. Aucun système d'exploitation, jeu de commandes étendu, aucune possibilité de liaison avec des modules partagés.

34
dartan

Le ARM EABI est un standard créé par ARM qui permet à différentes chaînes d'outils de créer des objets compatibles. Par exemple, de sorte qu'une chaîne d'outils puisse lier des objets créés par une autre chaîne d'outils) .

4
Roger Dahl