Pourquoi convertir HEX en ELF ?
Certaines chaînes d'outils et débogueurs embarqués n'acceptent que l'entrée ELF, pas le HEX brut. L'encapsulation d'un .hex dans .elf vous permet de charger le micrologiciel dans GDB ou des utilitaires de flashage qui nécessitent le format ELF, même sans table de symboles. L'ELF complet avec symboles et infos de débogage est produit par le compilateur ; la conversion à partir du HEX ne donne qu'une enveloppe dépouillée.
Comment convertir HEX en ELF
avr-objcopy OPEN-SOURCE
Exécutez avr-objcopy -I ihex -O elf32-avr firmware.hex firmware.elf ; remplacez elf32-avr par la cible correcte (ex: elf32-littlearm pour ARM Cortex-M). avr-objcopy est fourni avec avr-gcc et est inclus dans l'Arduino IDE.
arm-none-eabi-objcopy OPEN-SOURCE
Pour les cibles ARM Cortex-M, exécutez arm-none-eabi-objcopy -I ihex -O elf32-littlearm firmware.hex firmware.elf depuis la GNU Arm Embedded Toolchain.
À propos de ces formats
Un fichier .hex est un fichier Intel HEX : un micrologiciel (firmware) compilé pour un microcontrôleur tel qu'une puce Arduino, AVR ou PIC, stocké sous forme d'enregistrements en texte…
Ouvrir les détails de .HEX →Un fichier ELF est le format exécutable binaire utilisé par Linux, Android, les BSD et la plupart des systèmes de type Unix - l'équivalent du EXE sous Windows. Sur Linux, vous l'exécutez…
Ouvrir les détails de .ELF →Qualité et points de vigilance
- L'ELF de sortie ne contient que des octets bruts à leurs adresses cibles ; les noms de sections seront génériques (ex:
.sec1) plutôt que les noms originaux.text,.data,.bssattribués par le compilateur. - Si vous avez compilé le micrologiciel vous-même, le répertoire de build contient probablement déjà un
.elfà côté du.hex- vérifiez-y avant de convertir. - Le drapeau d'architecture
-O elf32-avrdoit correspondre au processeur réel ; l'utilisation d'un mauvais drapeau produit un ELF que les débogueurs ou les flasheurs rejetteront.
Foire aux questions
Puis-je récupérer les noms de fonctions et les symboles de débogage d'un fichier HEX ?
Où se trouve avr-objcopy sur ma machine ?
hardware/tools/avr/bin/ ; utilisez arm-none-eabi-objcopy pour les cibles ARM.