Hello!
I am trying to make a bin image of my application for me to flash it into my ARM Cortex M0 processor. I have succeeded in outputting an elf image, but failed with converting it to a bin with the arm-none-eabi-objcopy tool. Here is the line from the makefile:
%.$(TARGET).bin: %.$(TARGET).elf $(TRACE_OBJCOPY) $(Q)$(OBJCOPY) -O binary $< $@
Here is all of my Makefile.
#Set the toolchain program names. CC = arm-none-eabi-gcc AR = arm-none-eabi-ar AS = arm-none-eabi-as LD = arm-none-eabi-gcc OBJCOPY = arm-none-eabi-objcopy #Set the processor related flags (common to C code and linker). CPUFLAGS += -mcpu=cortex-m0plus -mthumb -mfloat-abi=soft CPUFLAGS += -specs=nano.specs -specs=nosys.specs #Set common C code flags. CFLAGS += -D__SAMD21G18A__=1 CFLAGS += -Wall -g -ffunction-sections -fdata-sections -O2 CFLAGS += $(CPUFLAGS) #Set the linker flags. LDFLAGS += -Wl,--gc-sections LDFLAGS += -Wl,-T$(CONTIKI_CPU)/atsamd21g18a.ld -lc LDFLAGS += -Wl,-Map=$(OBJECTDIR)/$(CONTIKI_PROJECT).map LDFLAGS += $(CPUFLAGS) #Configure the CPU path and source files. CONTIKI_CPU_DIRS += . CONTIKI_CPU_DIRS += dev CONTIKI_CPU_DIRS += samd21dfp/ CONTIKI_CPU_DIRS += samd21dfp/samd21a/include CONTIKI_CPU_DIRS += samd21dfp/samd21a/include/component CONTIKI_CPU_DIRS += samd21dfp/samd21a/include/instance CONTIKI_CPU_DIRS += ../arm/common/CMSIS CONTIKI_SOURCEFILES += samd21-startup.c clock.c rtimer-arch.c CONTIKI_SOURCEFILES += rtc.c evsys.c PROJECT_OBJECTFILES += ${addprefix $(OBJECTDIR)/,$(CONTIKI_TARGET_MAIN:.c=.o)} #Add objcopy to the verbosity control. ifeq ($(V),1) TRACE_OBJCOPY = else TRACE_OBJCOPY = @echo " OBJCOPY " $@ endif #Don't treat project object files and syscalls.o as intermediates (avoids deletion and recompiling). .SECONDARY: $(PROJECT_OBJECTFILES) .SECONDARY: $(OBJECTDIR)/syscalls.o #This rule creates a .bin image from the .elf file. Its output is made precious so it doesn't get #deleted even if it's an intermediate. .PRECIOUS: %.$(TARGET).bin %.$(TARGET).bin: %.$(TARGET).elf $(TRACE_OBJCOPY) $(Q)$(OBJCOPY) -O binary $< $@ .PRECIOUS: %.$(TARGET).elf %.$(TARGET).elf: %.co $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) contiki-$(TARGET).a \ $(OBJECTDIR)/syscalls.o $(CONTIKI_SOURCEFILES) $(TRACE_LD) $(Q)$(CC) $(LDFLAGS) -Wl,--section-start=.text=0x2000 $(TARGET_STARTFILES) ${filter-out %.a,$^} \ ${filter %.a,$^} $(TARGET_LIBFILES) -o $@ -I$(CONTIKI_CPU_DIRS) -I$(OBJECTDIR) #Add the .elf file to the clean list. CLEAN += *.$(TARGET).elf *.$(TARGET).bin
Yes tobermory, I am a make newbie :)
I managed to convert the elf to a bin file!
I called the objcopy command manually from Windows host OS instead of my linux virtual machine, and it worked.
For some reason, the same command didn't work in the VM.
Thank you for the help!