Dlaczego konwertować HEX na ELF?
Niektóre wbudowane łańcuchy narzędzi i debugery akceptują tylko wejście ELF, a nie surowy HEX. Opakowanie .hex w .elf pozwala na załadowanie oprogramowania układowego do GDB lub narzędzi do flashowania wymagających formatu ELF, nawet bez tablicy symboli. Pełny plik ELF z symbolami i informacjami debugowania jest tworzony przez kompilator; konwersja z HEX daje jedynie „odchudzoną” powłokę.
Jak przekonwertować HEX na ELF
avr-objcopy OPEN-SOURCE
Uruchom avr-objcopy -I ihex -O elf32-avr firmware.hex firmware.elf; zastąp elf32-avr poprawnym celem (np. elf32-littlearm dla ARM Cortex-M). avr-objcopy jest dostarczany z avr-gcc i dołączony do Arduino IDE.
arm-none-eabi-objcopy OPEN-SOURCE
Dla celów ARM Cortex-M uruchom arm-none-eabi-objcopy -I ihex -O elf32-littlearm firmware.hex firmware.elf z pakietu GNU Arm Embedded Toolchain.
O tych formatach
Plik .hex to plik Intel HEX: skompilowane oprogramowanie układowe (firmware) dla mikrokontrolera, takiego jak Arduino, AVR lub układ PIC, przechowywane jako rekordy tekstowe. Nie uruchamia…
Otwórz szczegóły .HEX →Plik ELF to binarny format wykonywalny używany przez systemy Linux, Android, BSD i większość systemów uniksopodobnych - odpowiednik plików EXE w systemie Windows. W systemie Linux uruchamia…
Otwórz szczegóły .ELF →Jakość i na co uważać
- Wyjściowy ELF zawiera tylko surowe bajty pod ich adresami docelowymi; nazwy sekcji będą generyczne (np.
.sec1) zamiast oryginalnych nazw.text,.data,.bssprzypisanych przez kompilator. - Jeśli samodzielnie kompilowałeś oprogramowanie układowe, katalog budowy prawdopodobnie zawiera już plik
.elfobok.hex- sprawdź to przed konwersją. - Flaga architektury
-O elf32-avrmusi odpowiadać rzeczywistemu procesorowi; użycie niewłaściwej flagi spowoduje powstanie pliku ELF, który zostanie odrzucony przez debugery lub programatory.
Najczęściej zadawane pytania
Czy mogę odzyskać nazwy funkcji i symbole debugowania z pliku HEX?
Gdzie na moim komputerze znajduje się avr-objcopy?
hardware/tools/avr/bin/; dla celów ARM użyj arm-none-eabi-objcopy.