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

Mic*_*sky 8 arm bootloader

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

小智 1

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

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

据我了解 intel-HEX 格式,记录不能是连续的,之间可能有漏洞。

一些备注:

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

只要您不自己编写引导过程的早期阶段,您就不会加载引导加载程序 - 它会为您加载。发生这种情况的地址通常是固定的且不可更改。因此不需要位置无关的代码,但这也没有坏处。