Waarom HEX naar ELF converteren?
Sommige embedded toolchains en debuggers accepteren alleen ELF-invoer, geen ruwe HEX. Door een .hex in .elf te verpakken, kunt u firmware laden in GDB of flash-hulpprogramma’s die het ELF-formaat vereisen, zelfs zonder symbooltabel. De volledige ELF met symbolen en debug-info wordt geproduceerd door de compiler; converteren vanuit HEX levert slechts een gestripte huls op.
Hoe HEX naar ELF te converteren
avr-objcopy OPEN-SOURCE
Voer avr-objcopy -I ihex -O elf32-avr firmware.hex firmware.elf uit; vervang elf32-avr door het juiste doel (bijv. elf32-littlearm voor ARM Cortex-M). avr-objcopy wordt geleverd bij avr-gcc en is gebundeld in de Arduino IDE.
arm-none-eabi-objcopy OPEN-SOURCE
Voor ARM Cortex-M doelen, voer arm-none-eabi-objcopy -I ihex -O elf32-littlearm firmware.hex firmware.elf uit vanuit de GNU Arm Embedded Toolchain.
Over deze formaten
Een .hex-bestand is een Intel HEX-bestand: gecompileerde firmware voor een microcontroller zoals een Arduino, AVR of PIC-chip, opgeslagen als records in platte tekst. Je voert het niet uit…
Open .HEX details →Een ELF-bestand is het binaire uitvoerbare formaat dat wordt gebruikt door Linux, Android, de BSD's en de meeste Unix-achtige systemen - het equivalent van Windows EXE. Op Linux voer je het…
Open .ELF details →Kwaliteit & waar op te letten
- De resulterende ELF bevat alleen ruwe bytes op hun doeladressen; sectienamen zullen generiek zijn (bijv.
.sec1) in plaats van de originele.text,.data,.bssnamen die door de compiler zijn toegewezen. - Als u de firmware zelf hebt gecompileerd, bevat de build-map waarschijnlijk al een
.elfnaast de.hex- controleer dat eerst voordat u gaat converteren. - De
-O elf32-avrarchitectuurvlag moet overeenkomen met de werkelijke CPU; het gebruik van de verkeerde vlag produceert een ELF die debuggers of flashers zullen weigeren.
Veelgestelde vragen
Kan ik functienamen en debug-symbolen herstellen uit een HEX-bestand?
Waar vind ik avr-objcopy op mijn machine?
hardware/tools/avr/bin/; gebruik arm-none-eabi-objcopy voor ARM-doelen.