¿Por qué convertir HEX a ELF?
Algunas cadenas de herramientas integradas y depuradores solo aceptan entradas ELF, no HEX brutos. Envolver un .hex en .elf le permite cargar el firmware en GDB o utilidades de flasheo que requieren el formato ELF, incluso sin una tabla de símbolos. El ELF completo con símbolos e información de depuración es producido por el compilador; convertir desde HEX solo genera un caparazón despojado.
Cómo convertir HEX a ELF
avr-objcopy OPEN-SOURCE
Ejecute avr-objcopy -I ihex -O elf32-avr firmware.hex firmware.elf; reemplace elf32-avr con el objetivo correcto (por ejemplo, elf32-littlearm para ARM Cortex-M). avr-objcopy se distribuye con avr-gcc y viene incluido dentro del Arduino IDE.
arm-none-eabi-objcopy OPEN-SOURCE
Para objetivos ARM Cortex-M, ejecute arm-none-eabi-objcopy -I ihex -O elf32-littlearm firmware.hex firmware.elf desde la GNU Arm Embedded Toolchain.
Acerca de estos formatos
Un archivo .hex es un archivo Intel HEX: firmware compilado para un microcontrolador como un chip Arduino, AVR o PIC, almacenado como registros de texto plano. No se ejecuta en un PC; se…
Abrir detalles de .HEX →Un archivo ELF es el formato ejecutable binario utilizado por Linux, Android, los BSD y la mayoría de los sistemas tipo Unix - el equivalente al EXE de Windows. En Linux se ejecuta…
Abrir detalles de .ELF →Calidad y qué observar
- El ELF de salida contiene solo bytes brutos en sus direcciones de destino; los nombres de las secciones serán genéricos (por ejemplo,
.sec1) en lugar de los nombres originales.text,.data,.bssasignados por el compilador. - Si usted mismo compiló el firmware, es probable que el directorio de compilación ya contenga un
.elfjunto al.hex- verifique allí antes de convertir. - La bandera de arquitectura
-O elf32-avrdebe coincidir con la CPU real; usar la bandera incorrecta produce un ELF que los depuradores o flasheadores rechazarán.
Preguntas frecuentes
¿Puedo recuperar nombres de funciones y símbolos de depuración de un archivo HEX?
¿Dónde está avr-objcopy en mi equipo?
hardware/tools/avr/bin/; use arm-none-eabi-objcopy para objetivos ARM.