在使用OpenOCD刷新ARM微控制器之前,是否需要使用objcopy?

时间:2012-12-01 14:49:00

标签: arm elf objcopy openocd

用于ARM微控制器的“正常”ARM交叉编译通常包含三个或四个步骤:

  1. 使用汇编程序将启动代码(如果是程序集)汇编到目标文件中
  2. 使用编译器将任何源代码编译为目标文件
  3. 使用链接器将目标文件链接到.elf文件
  4. 使用objcopy将.elf文件转换为.hex文件
  5. Flash .hex文件
  6. 我不确定这是第4步。在OpenOCD的flash write_image命令的文档中,它声明:

      

    文件[type]可以明确指定为bin(二进制),ihex(Intel hex),elf(ELF文件),s19(Motorola s19)。记忆,或建设者。

    很明显,OpenOCD支持elf文件,但我不知道这实际意味着什么。这仅在某些目标上得到支持吗? JTAG / SWD适配器必须提供某种类似objcopy的功能吗?从OpenOCD尚未支持elf文件的日子开始,它只是一个延续吗?

1 个答案:

答案 0 :(得分:2)

包含地址和数据的文件格式如elf,ihex,srec都很好用,我主要使用elf。 .bin文件没有携带地址所以你1)必须指定起始地址2)objcopy填充定义区域之间的间隙,这可能会产生问题,并且需要更多的加载时间等。

使用.bin会在地址上留下人为错误的空间。不幸的是,我遇到过.elf和openocd的组合将加载错误的地址或至少在加载时打印错误的地址的情况。

尽可能使用.elf文件。 .hex或.srec如果该实用程序不支持elf但支持ihex或srec。例如,当使用x / y / zmodem加载器时.bin。

我认为openocd是分层的,有一个前端可以读取文件,当它到达后端时,jtag或者后端不知道数据源自哪种文件。我不知道一个事实但是假设......