Objcopy elf to bin文件

时间:2018-04-05 19:47:39

标签: stm32 elf bin objcopy

我有STM32F404主板,我正试图将其闪存。我正在关注tutorial

在项目Makefile

$(PROJ_NAME).elf: $(SRCS)
    $(CC) $(CFLAGS) $^ -o $@ 
    $(OBJCOPY) -O ihex $(PROJ_NAME).elf $(PROJ_NAME).hex
    $(OBJCOPY) -O binary $(PROJ_NAME).elf $(PROJ_NAME).bin

burn: proj
    $(STLINK)/st-flash write $(PROJ_NAME).bin 0x8000000

使用OBJCOPY生成bin文件,然后使用Make target burn

进行闪存

我的问题:

问题1 :在这种情况下OBJCOPY=arm-none-eabi-objcopy是什么。我开了那个男人,但我没有完全动摇,任何人都能解释一下吗?

问题2 :闪烁bin文件会产生预期的结果(Leds闪烁)但闪烁精灵文件$(STLINK)/st-flash write $(PROJ_NAME).elf 0x8000000时LED不会闪烁,为什么?

1 个答案:

答案 0 :(得分:3)

  

问题1:在这种情况下,OBJCOPY = arm-none-eabi-objcopy是什么。我开了那个男人,但我没有完全动摇,任何人都能解释一下吗?

它将值arm-none-eabi-objcopy分配给make变量OBJCOPY

make执行此命令时:

$(OBJCOPY) -O binary $(PROJ_NAME).elf $(PROJ_NAME).bin

运行的实际命令是

arm-none-eabi-objcopy -O binary tim_time_base.elf tim_time_base.bin
  

问题2:闪烁bin文件会产生预期的结果(Leds闪烁)但是闪烁精灵文件$(STLINK)/ st-flash写入$(PROJ_NAME).elf 0x8000000为什么?

tim_time_base.elf是一个ELF文件 - 它具有与之关联的元数据。运行arm-none-eabi-readelf -h tim_time_base.elf以查看某些元数据是什么。

但是当处理器在重置后跳转到位置0x8000000时,它期望找到可执行指令,而不是元数据。当它发现"垃圾"它不明白,它可能只是暂停。它当然没有找到指示灯闪烁。