Hvorfor konvertere HEX til ELF?
Nogle embedded toolchains og debuggere accepterer kun ELF-input, ikke rå HEX. Ved at pakke en .hex ind i .elf kan du indlæse firmware i GDB eller flash-værktøjer, der kræver ELF-format, selv uden en symboltabel. Den komplette ELF med symboler og debug-info produceres af compileren; konvertering fra HEX giver kun en skrabet skal.
Sådan konverterer du HEX til ELF
avr-objcopy OPEN-SOURCE
Kør avr-objcopy -I ihex -O elf32-avr firmware.hex firmware.elf; erstat elf32-avr med det korrekte mål (f.eks. elf32-littlearm til ARM Cortex-M). avr-objcopy leveres med avr-gcc og er bundlet i Arduino IDE.
arm-none-eabi-objcopy OPEN-SOURCE
For ARM Cortex-M mål, kør arm-none-eabi-objcopy -I ihex -O elf32-littlearm firmware.hex firmware.elf fra GNU Arm Embedded Toolchain.
Om disse formater
En .hex-fil er en Intel HEX-fil: kompileret firmware til en mikrocontroller som f.eks. en Arduino, AVR eller PIC-chip, gemt som almindelige tekstposter. Du kører den ikke på en PC - du…
Åbn .HEX detaljer →En ELF-fil er det binære eksekverbare format, der bruges af Linux, Android, BSD-systemerne og de fleste Unix-lignende systemer - det svarer til Windows EXE. På Linux kører du den direkte;…
Åbn .ELF detaljer →Kvalitet & hvad man skal være opmærksom på
- Output-ELF-filen indeholder kun rå bytes på deres måladresser; sektionsnavne vil være generiske (f.eks.
.sec1) i stedet for de oprindelige.text,.data,.bssnavne tildelt af compileren. - Hvis du selv har kompileret firmwaren, indeholder build-mappen sandsynligvis allerede en
.elfsammen med din.hex- tjek der før konvertering. - Arkitektur-flaget
-O elf32-avrskal matche den faktiske CPU; brug af det forkerte flag producerer en ELF, som debuggere eller flash-enheder vil afvise.
Ofte stillede spørgsmål
Kan jeg genskabe funktionsnavne og debug-symboler fra en HEX-fil?
Hvor findes avr-objcopy på min maskine?
hardware/tools/avr/bin/; brug arm-none-eabi-objcopy til ARM-mål.