2016-11-15 44 views
1

我开始学习编写一些低级别的微控制器软件,并且我已经开始研究链接器脚本。“ENTRY”在链接器脚本中的含义是什么?

在这种情况下,我没有真正了解ENTRY命令的含义。由于大多数微控制器都在预定的地址开始执行,它会在链接器脚本中选择哪个入口点有什么不同?

回答

1

ENTRY()是一个ELF功能,基本上只是在您的可执行文件的ELF标头中设置程序入口地址。该地址可能与二进制文件的第一个可执行段的起始地址不同(如果您未定义ENTRY(),则该地址可能是默认执行地址)。

是否使用此信息(即,是否开始执行发生在第一个代码段地址或ENTRY())不受链接器控制,因为它完全取决于ELF加载器的可用性和功能。

正如你通常在微控制器上没有这样的东西,ENTRY()在那里实际上是没用的,你可能不会遗漏这个声明。

+0

谢谢!这几乎是我得出的结论,但我不确定,因为在许多用于裸机MCU应用程序的链接器脚本中,我仍然看到了入口点的定义。 – joseCM

+0

是否需要获得gdb远程扩展调试会话以允许使用“加载”。我发现我需要该功能才能工作(这对于开发来说非常方便)。 – aselle

1

入口点定义程序的起点。这当然是非常好的信息。这种方式闪光灯工具知道在哪里闪光灯您的代码和调试工具知道你的符号在哪里。

+0

我知道这是有用的信息。但是,工具链接器脚本的全部用途不是知道在哪里刷新代码?如果你正在以完全裸机的方式进行编程,或者我错过了什么,指定入口点并不会改变程序的起点? – joseCM

+0

这是正确的,链接器脚本不能,也不应该影响MCU开始执行代码的地址。链接器脚本指示如何将程序链接在一起以及在哪里发生。这是它的主要目的。 – staringlizard

+0

所以我的问题依然存在。在这种情况下,是否有必要或有一些实际的理由来定义入口点? – joseCM

相关问题