2

我正在使用基于 cortex-A8 的 S5PV210。它以初始化开始,然后跳转到 SDRAM 的 0x20000000 并运行我的代码。所以我只需要将我的主要功能放在0x20000000上。

据我所知,有两种方法可以做到。第一种是使用 -Ttext=0x20000000 使 .text 从 0x20000000 开始。第二个是使用 -fpie -pie 生成与位置无关的代码。我正在使用后者。

它大部分时间都有效,但我陷入了我的一个项目。症状是 printf("123") 将打印永久的混乱代码并且永远不会返回。如果我切换回使用 -Ttext=0x20000000,那么它会正常工作。

我已经尝试了一些步骤来分析它:

  1. 更改我的主函数只需调用一个 printf 以便我的代码不会调用任何其他函数,如下所示:

    int main(){ printf("123"); 而(1);返回0;}

  2. 因为 -fpie -pie 大部分时间都很好用,所以我开始注释一些其他功能,最后发现如果我注释了足够多的代码,printf 将再次起作用。

现在我很困惑,-fpie 和 -pie 真的有效吗?

4

1 回答 1

0

好的。我犯了一个愚蠢的错误。初始化会将我的代码从 NAND 复制到 SDRAM 中,它的大小限制为 5kb .....

于 2014-10-17T07:21:16.900 回答