Warum HEX in ELF konvertieren?
Einige eingebettete Toolchains und Debugger akzeptieren nur ELF-Eingaben, keine rohen HEX-Daten. Das Verpacken einer .hex in .elf ermöglicht es Ihnen, Firmware in GDB oder Flash-Utilities zu laden, die das ELF-Format erfordern, selbst ohne Symboltabelle. Die vollständige ELF mit Symbolen und Debug-Informationen wird vom Compiler erstellt; die Konvertierung aus HEX liefert nur eine reduzierte Hülle.
Wie man HEX in ELF konvertiert
avr-objcopy OPEN-SOURCE
Führen Sie avr-objcopy -I ihex -O elf32-avr firmware.hex firmware.elf aus; ersetzen Sie elf32-avr durch das korrekte Ziel (z. B. elf32-littlearm für ARM Cortex-M). avr-objcopy wird mit avr-gcc ausgeliefert und ist in der Arduino IDE enthalten.
arm-none-eabi-objcopy OPEN-SOURCE
Führen Sie für ARM Cortex-M-Ziele arm-none-eabi-objcopy -I ihex -O elf32-littlearm firmware.hex firmware.elf aus der GNU Arm Embedded Toolchain aus.
Über diese Formate
Eine .hex-Datei ist eine Intel-HEX-Datei: kompilierte Firmware für einen Mikrocontroller wie Arduino, AVR oder PIC, gespeichert als Klartext-Datensätze. Sie wird nicht auf einem PC…
.HEX-Details öffnen →Eine ELF-Datei ist das binäre ausführbare Format, das von Linux, Android, den BSDs und den meisten Unix-ähnlichen Systemen verwendet wird - das Äquivalent zur Windows-EXE. Unter Linux…
.ELF-Details öffnen →Qualität & worauf zu achten ist
- Die Ausgabe-ELF enthält nur Rohbytes an ihren Zieladressen; Sektionsnamen werden generisch sein (z. B.
.sec1) anstatt der ursprünglichen Namen wie.text,.data,.bss, die vom Compiler zugewiesen wurden. - Wenn Sie die Firmware selbst kompiliert haben, enthält das Build-Verzeichnis wahrscheinlich bereits eine
.elfneben der.hex- prüfen Sie dies vor der Konvertierung. - Das Architektur-Flag
-O elf32-avrmuss mit der tatsächlichen CPU übereinstimmen; die Verwendung des falschen Flags führt zu einer ELF, die von Debuggern oder Flash-Programmen abgelehnt wird.
Häufig gestellte Fragen
Kann ich Funktionsnamen und Debug-Symbole aus einer HEX-Datei wiederherstellen?
Wo befindet sich avr-objcopy auf meinem Rechner?
hardware/tools/avr/bin/ zu finden; verwenden Sie arm-none-eabi-objcopy für ARM-Ziele.