Varför konvertera HEX till ELF?
Vissa inbäddade verktygskedjor och debuggers accepterar endast ELF-indata, inte rå HEX. Genom att kapsla in en .hex i .elf kan du ladda firmware i GDB eller flash-verktyg som kräver ELF-format, även utan en symboltabell. Den fullständiga ELF-filen med symboler och felsökningsinfo produceras av kompilatorn; konvertering från HEX ger endast ett avskalat skal.
Hur man konverterar HEX till ELF
avr-objcopy OPEN-SOURCE
Kör avr-objcopy -I ihex -O elf32-avr firmware.hex firmware.elf; ersätt elf32-avr med rätt mål (t.ex. elf32-littlearm för ARM Cortex-M). avr-objcopy levereras med avr-gcc och finns inbäddat i Arduino IDE.
arm-none-eabi-objcopy OPEN-SOURCE
För ARM Cortex-M-mål, kör arm-none-eabi-objcopy -I ihex -O elf32-littlearm firmware.hex firmware.elf från GNU Arm Embedded Toolchain.
Om dessa format
En .hex-fil är en Intel HEX-fil: kompilerad firmware för en mikrokontroller som en Arduino, AVR eller PIC-chip, lagrad som textposter. Du kör den inte på en PC - du «flashar» den till…
Öppna detaljer för .HEX →En ELF-fil är det binära körbara formatet som används av Linux, Android, BSD-systemen och de flesta Unix-liknande system - motsvarigheten till Windows EXE. På Linux kör du den direkt; en…
Öppna detaljer för .ELF →Kvalitet & vad man bör tänka på
- Den resulterande ELF-filen innehåller endast råa bytes på deras måladresser; sektionsnamnen kommer att vara generiska (t.ex.
.sec1) snarare än de ursprungliga namnen.text,.data,.bsssom tilldelats av kompilatorn. - Om du kompilerade din firmware själv innehåller byggkatalogen sannolikt redan en
.elftillsammans med din.hex- kontrollera där innan du konverterar. - Arkitekturflaggan
-O elf32-avrmåste matcha den faktiska processorn; om fel flagga används skapas en ELF som debuggers eller flash-verktyg kommer att avvisa.
Vanliga frågor
Kan jag återställa funktionsnamn och felsökningssymboler från en HEX-fil?
Var finns avr-objcopy på min dator?
hardware/tools/avr/bin/; använd arm-none-eabi-objcopy för ARM-mål.