Por que converter HEX para ELF?
Algumas toolchains e depuradores embarcados aceitam apenas entrada ELF, não HEX bruto. Envolver um .hex em .elf permite carregar o firmware no GDB ou utilitários de gravação que exigem o formato ELF, mesmo sem uma tabela de símbolos. O ELF completo com símbolos e info de depuração é produzido pelo compilador; converter a partir do HEX gera apenas uma casca vazia.
Como converter HEX para ELF
avr-objcopy OPEN-SOURCE
Execute avr-objcopy -I ihex -O elf32-avr firmware.hex firmware.elf; substitua elf32-avr pelo alvo correto (ex: elf32-littlearm para ARM Cortex-M). O avr-objcopy vem com o avr-gcc e está incluído no Arduino IDE.
arm-none-eabi-objcopy OPEN-SOURCE
Para alvos ARM Cortex-M, execute arm-none-eabi-objcopy -I ihex -O elf32-littlearm firmware.hex firmware.elf a partir da GNU Arm Embedded Toolchain.
Sobre estes formatos
Um arquivo .hex é um arquivo Intel HEX: firmware compilado para um microcontrolador como um chip Arduino, AVR ou PIC, armazenado como registros de texto simples. Você não o executa em um PC…
Abrir detalhes de .HEX →Um arquivo ELF é o formato executável binário usado pelo Linux, Android, os BSDs e a maioria dos sistemas do tipo Unix - o equivalente ao EXE do Windows. No Linux, você o executa…
Abrir detalhes de .ELF →Qualidade e o que observar
- O ELF de saída contém apenas bytes brutos em seus endereços de destino; os nomes das seções serão genéricos (ex:
.sec1) em vez dos nomes originais.text,.data,.bssatribuídos pelo compilador. - Se você mesmo compilou o firmware, o diretório de compilação provavelmente já contém um
.elfjunto ao.hex- verifique lá antes de converter. - A flag de arquitetura
-O elf32-avrdeve corresponder à CPU real; usar a flag errada produz um ELF que depuradores ou gravadores irão rejeitar.
Perguntas frequentes
Posso recuperar nomes de funções e símbolos de depuração de um arquivo HEX?
Onde está o avr-objcopy na minha máquina?
hardware/tools/avr/bin/; use arm-none-eabi-objcopy para alvos ARM.