2016-08-15 4 views
1

Was ist der Unterschied zwischen arm-none-eabi und arm-linux-gnueabi? Ich kenne den Unterschied, wie man sie benutzt (eine für Bare-Metal-Software, die andere für Software, die unter Linux laufen soll). Aber was ist der technische Hintergrund?Unterschied zwischen arm-none-eabi und arm-linux-gnueabi?

Ich sehe, es gibt einen Unterschied in der ABI, die, soweit ich verstehe, etwas wie eine API, aber auf binärer Ebene ist. Es gewährleistet die Interoperabilität verschiedener Anwendungen.

Aber ich verstehe nicht wirklich, auf welche Weise das Haben oder Nichthaben eines Betriebssystems meine Toolchain beeinflusst. Das Einzige, was mir in den Sinn kam, ist, dass Bibliotheken während des Kompilierens von Bare-Metal-Software möglicherweise statisch verknüpft werden müssen (oder?), Weil sie von os nicht dynamisch bereitgestellt werden.

Die meisten Seiten, die ich zu diesem Toppic gefunden habe, haben mir einfach gesagt, wie man die Toolchains benutzt, aber nicht den technischen Hintergrund. Ich bin ein Student der Mechatronik und neu in eingebetteten Systemen, so dass meine Erfahrung in diesem Bereich etwas begrenzt ist.

+0

Ja ist es meistens eine Bibliothekssache, versuchend, auf dem Laufen auf Linux (libc, usw.) gegen zu justieren, denke ich newlib. Für Bare-Metal-Arbeiten ist beides in Ordnung, da sie sowohl Assembly von C erstellen als auch Objekte aus Assembly herstellen und mit eigenen Linker-Skripten usw. verknüpfen können. Und der Bare-Metal, von dem ich spreche, ist einer ohne Standardbibliotheken und/oder Sie verwenden diesen Werkzeug, um eigene Bibliotheken aus Quellen zu erstellen. Im Grunde funktionieren beide als generische Cross Compiler, wenn Sie integrierte Bibliotheksunterstützung benötigen/brauchen, dann kann es von Bedeutung sein, welche Sie verwenden. –

+0

@dwelch: Es ist nicht notwendig, eine Bibliothek auf Bare-Metal zu verwenden. Sie müssen nur ** möglicherweise ** einige Funktionen bereitstellen (meistens 'memcpy' usw.), die gcc aufrufen kann (z.B. wenn' structs' zugewiesen werden). – Olaf

+0

@Olaf Ich benutze keine C-Bibliotheken auf Bare-Metal, aber einige Leute tun, und von denen einige newlib (oder was auch immer freundlich zu diesem Build ist), und von denen einige Arm-None-Eabi anstelle von Arm-Linux verwenden möchten -gnueabi, weil es ihnen wichtig ist. Es hängt also davon ab, was das OP anstrebt, ob die Unterschiede wichtig sind oder nicht. –

Antwort

1

Vielleicht hilft diese link zu einer Beschreibung.

Wahrscheinlich der größte Unterschied:

„Das Bare-Metal-ABI wird eine andere C-Bibliothek (newlib zum Beispiel, oder auch keine C-Bibliothek) übernimmt an das Linux-ABI (die glibc annimmt) Daher ist der Compiler. kann verschiedene Funktionsaufrufe machen, je nachdem, was über die Standard-C-Bibliothek hinaus als verfügbar erachtet wird. "