Mit avr-gcc bzw. WinAVR wird das hex aus einem elf erzeugt, und zwar mittels avr-objcopy. Wie bL1nK schone geschrieben hat, muss man objcopy mit der passenden Option aufrufen. Je nach Makefile/shell-script, das du verwendest, diest die STelle, wo du anpacken musst, anders aus.

Der Aufruf von avr-objcopy muss jedoch so aussehen für den Programm-Code:
Code:
	avr-obj -j .text -j .data -O binary foo.elf foo.bin
Daten im EEPROM
Code:
	avr-obj -j .eeprom -O binary foo.elf foo_eeprom.bin
Das kannst du auch kombinieren bzw. neue LMAs (load memoey address) zuordnen und mehrere Sections angeben. Der Bootloader-Code steht in .bootloader.