2

我正在使用 S5PV210,一个 sumsung arm-cortexA8 芯片。在其文档中,程序将从 0xd0200010 开始执行。现在我成功地在它上面运行了我的程序。但我还有一些问题。

起初,我使用链接命令“-Ttext 0xd02000010 -e main”,并认为它会将main函数放到地址0xd0200010。但我发现它只是将 .text 部分放到 0xd0200010 上。如果我更改了 .c 文件中的函数顺序,即使 .text 部分仍将放在 0xd0200010 上,但主函数不会在该地址上,并且“-e main”根本不起作用。

那么,我怎样才能使 main 函数位于 0xd0200010?我可以通过编译器和链接器命令来完成吗?

4

1 回答 1

2

我解决了..

elf文件用于OS平台,那么入口点定义为elf文件的头部。

但是对于裸机系统,它无法读取elf文件的信息,所以必须转换成二进制文件,其中不包含任何入口点信息。也就是说,裸机系统没有“入口点”的概念。所以 -e main 选项不适用于二进制文件。

有很多方法可以将 C 函数放在固定地址上。我只是发布我的解决方案

  1. 在用户定义的部分声明主函数

    int main()属性((section(".main")))

  2. 使用链接器脚本,将 .main 部分放在所需的地址上。

    SECTIONS { .=0x0000 .text : { led.o (.main) *(.text) } ........ }

于 2014-10-03T02:49:44.520 回答