Зачем конвертировать HEX в ELF?
Некоторые встроенные цепочки инструментов и отладчики принимают только входные данные ELF, а не «сырой» HEX. Обертывание .hex в .elf позволяет загружать прошивку в GDB или утилиты для прошивки, требующие формат ELF, даже без таблицы символов. Полный ELF с символами и отладочной информацией создается компилятором; конвертация из HEX дает лишь «пустую оболочку».
Способы конвертации HEX в ELF
avr-objcopy OPEN-SOURCE
Запустите avr-objcopy -I ihex -O elf32-avr firmware.hex firmware.elf; замените elf32-avr на правильную цель (например, elf32-littlearm для ARM Cortex-M). avr-objcopy поставляется с avr-gcc и входит в состав Arduino IDE.
arm-none-eabi-objcopy OPEN-SOURCE
Для целей ARM Cortex-M запустите arm-none-eabi-objcopy -I ihex -O elf32-littlearm firmware.hex firmware.elf из GNU Arm Embedded Toolchain.
Об этих форматах
Файл .hex - это файл Intel HEX: скомпилированная прошивка для микроконтроллера, такого как Arduino, AVR или PIC, хранящаяся в виде текстовых записей. Вы не запускаете его на ПК - вы…
Открыть детали .HEX →Файл ELF - это формат двоичных исполняемых файлов, используемый в Linux, Android, BSD и большинстве Unix-подобных систем; он является эквивалентом EXE в Windows. В Linux он запускается…
Открыть детали .ELF →Качество и на что обратить внимание
- Выходной ELF содержит только необработанные байты по их целевым адресам; имена разделов будут общими (например,
.sec1), а не оригинальными именами.text,.data,.bss, назначенными компилятором. - Если вы компилировали прошивку самостоятельно, директория сборки, скорее всего, уже содержит
.elfрядом с.hex- проверьте это перед конвертацией. - Флаг архитектуры
-O elf32-avrдолжен соответствовать реальному процессору; использование неправильного флага создаст ELF, который отладчики или прошивальщики отклонят.
Часто задаваемые вопросы
Можно ли восстановить имена функций и отладочные символы из HEX-файла?
Где найти avr-objcopy на моем компьютере?
hardware/tools/avr/bin/; используйте arm-none-eabi-objcopy для целей ARM.