使用gcc的Intel十六进制格式和位置无关代码

时间:2017-01-20 13:04:34

标签: arm bootloader

我不确定这是否特定于我正在使用的处理器,因此我需要使用Cortex M0 +。我想知道:如果我使用-fPIC通过gcc生成一个hex文件,我会生成... Position Independent Code。但是,我从objcopy中获取的intel hex文件格式总是在每一行的标题上都有地址信息。如果我正在尝试编写引导加载程序,我是否只是忽略该信息,跳过与其相关的字节,并将实际代码加载到内存中的任何位置,或者我是否必须以某种方式跟踪它?

1 个答案:

答案 0 :(得分:1)

intel-HEX格式专门用于编程PROM,EPROMS或具有内部EPROM的处理器,通常与程序员一起用于这些设备。记录开头的地址与程序代码没有多大关系。它们指示将在哪个PROM地址写入数据。还要记住PROM可以映射到处理器的地址空间的任何地方,因此无论如何最终地址都可以改变。

只要您不想编写PROM,就必须删除除记录中的数据之外的任何内容。 (不要忘记最后的校验和; - )

据我所知,intel-HEX格式的记录不能连续,可能会有漏洞。

一些评论:

-f PIC参数不对intel-HEX格式负责。我认为在命令行的某个地方你会找到-O ihex。如果你想拥有一个可以执行的文件,objcopy提供了更适合的输出格式。

只要您不自己编写引导过程的早期阶段,就不会加载引导加载程序 - 它将为您加载。发生这种情况的地址通常是固定的,不可更改。所以不需要与位置无关的代码,但它也不会受到伤害。