Plus je regarde ça PDF moins je comprends ce que cela signifie. J'aimerais aussi quelques commentaires sur ces autres 1 et 2 .
Un ABI (Application Binary Interface) est une norme qui définit un mappage entre des concepts de bas niveau dans des langages de haut niveau et les capacités du code machine d'une plate-forme matérielle/OS spécifique. Cela inclut des choses comme:
Les réponses à ces questions sont:
Sans une sorte de normalisation, le code (machine) créé par différents compilateurs ne pourrait pas utiliser le même type de bibliothèques (comment sauriez-vous de quelle manière le code de bibliothèque s'attend à ce que les arguments de fonction ou les structures de données soient transmis?).
Chaque plate-forme (une combinaison de matériel spécifique, de logiciel de système d'exploitation et de code écrit dans des langages de programmation spécifiques/compilé avec des compilateurs spécifiques) définit un ensemble complet d'ABI pour rendre les choses interopérables. La terminologie dans ce domaine n'est pas claire, parfois les gens parlent simplement de "l'ABI", d'autres fois on l'appelle le "supplément de plate-forme", ou on mentionne le langage de programmation et dit par ex. "le C++ ABI". Gardez à l'esprit, il n'y a rien de tel.
Les documents auxquels vous avez lié dans votre question en sont tous des exemples spécifiques (ABI spécifiques à la langue/au système d'exploitation/au matériel).
Même sur une plate-forme spécifique, il n'est pas nécessaire d'avoir un et un seul ABI (set) car différentes conventions de ce type peuvent avoir des avantages différents (et donc fournir de meilleurs performances/code plus petit/meilleure utilisation de la mémoire/... - selon le programme) et les concepteurs de systèmes essaient généralement d'être flexibles/autorisés.
Sur Microsoft Windows 32 bits, par exemple, il existe une multitude d'ABI (fastcall, stdcall, Pascal, ...) pour la fonction appelant les parties de convention.
Quoi qu'il en soit, une recherche générique de stackoverflow pour "ABI" (inclus les liens sous la barre latérale "Connexes") donne tellement de pistes pour rechercher cette question que je ferme ma réponse à ce stade.
ARM ABI doit être référencé lorsqu'un port du noyau du système d'exploitation sur ARM est utilisé.
EABI correspond au démarrage du processeur pour charger une application sans noyau intermédiaire. (Quelque chose comme ça était ROM-BASIC quand DOS est apparu), i. e. le firmware lui-même est l'application autonome, pas de moniteur spécifique à la carte ou quoi que ce soit.
Le premier lien est vers une sous-partie détaillée liée aux appels de procédure de l'AB ARM. Au fur et à mesure que le modèle des programmeurs avance avec chaque version de ARM CPU, ces sujets sont importants et couverts par ABI.
Le deuxième lien concerne la spécification du format binaire pour les fichiers objets générés par le compilateur appelé ELF qui est spécifié par la marque SCO d'un fournisseur de système d'exploitation. Peut-être SCO est l'organisation de Santa Cruz qui crée ses propres versions d'Unix ainsi que de Linux, mais cette histoire s'écarte de la question. Vous devriez être intéressé si vous avez l'intention d'implémenter un éditeur de liens prenant en charge le ciblage ELF BRAS.
Sauf si vous êtes directement concerné par les détails d'implémentation de la chaîne d'outils de construction pour ARM, EABI devrait être peu préoccupant, et à moins que vous ne teniez compte des aspects spécifiques au système d'exploitation de cette chaîne d'outils ARM ABI devrait également être peu préoccupant.