Angenommen, Sie haben eine Cross-Compilierungs-Werkzeugkette, die Binärdateien für die ARM-Architektur erzeugt.Was sind die Unterschiede zwischen der C/C++ - Bare-Metal-Kompilierung und der Kompilierung für ein bestimmtes Betriebssystem (Linux)?
Ihre Werkzeug-Kette ist das wie (läuft auf einer X86_64 Maschine mit Linux):
- Arm-linux-gnueabi-gcc.exe: für Cross-Kompilierung für Linux auf ARM laufen.
- arm-gcc.exe: für Bare-Metal Cross-Compilation-Targeting auf ARM.
... und die Fülle anderer Tools für Cross-Compilierung auf ARM.
Punkte, die mich interessiert sind:
- (E) ABI Unterschiede zwischen Binärdateien (falls vorhanden)
- Einschränkungen bei Bare-Metal (wie dynamische Speicherzuordnungen, Verwendung von statischen Konstruktoren im Falle von C++, Threading-Modellen, etc.)
- binäre Unterschiede zwischen den beiden Fällen in Bezug auf Informationen zu jedem von ihnen (wie Debug-Info-Unterstützung, etc.);
Das klingt wie "Unterschied zwischen meinem kleinen Programm und meinem Betriebssystem" ... – deviantfan
@deviantfan: Sound eher wie "Kann ich alle" normalen "Funktionen von C/C++ verwenden, die ich für Firmware (Bare-Metal) Entwicklung? " Nach dem Lesen dieses Artikels hier: http://www.state-machine.com/arm/Building_bare-metal_ARM_with_GNU.pdf Ich bemerkte einige Einschränkungen von Bare-Metal C/C++. Gibt es noch mehr (und auch Unterschiede)? :) – Liviu
Für * echtes Bare Metal * müssen Sie eine Portabilitätsschicht für * newlib * schreiben. Auf Gnu Linux, entweder * eglibc * oder [* glibc *] (http: //en.wikipedia.org/wiki/GNU_C_Library) wird verwendet. Grundsätzlich ist Ihre Frage, was ist der Unterschied. Es gibt 1000s. Möchten Sie 'mmap()' verwenden? Usw. Die binären/Compiler-Unterschiede spielen keine Rolle (meistens). Es sind die C-Bibliotheken, die völlig verschieden sind. Datei-E/A? –