我使用的是S5PV210,一款sumsung-arm-cortexA8芯片。在其文档中,程序将在0xd0200010开始执行。现在我成功地在上面运行了我的程序。但我仍然有一些问题。
起初,我使用了链接命令"-Ttext 0xd02000010-e-main",并认为它会将主函数放在地址0xd0200010。但我发现它只是把.text部分放在了0xd0200010上。如果我更改了.c文件中函数的顺序,即使.text部分仍将放在0xd0200010上,但main函数将不在该地址上,并且"-e-main"根本不起作用。
那么,我如何使主函数为0xd0200010?我可以通过编译器和链接器命令来完成吗?
我解决了。。
将elf文件用于操作系统平台,然后定义入口点为elf文件的头。
但对于裸金属系统,它无法读取elf文件的信息,因此必须将其转换为二进制文件,该文件不包含任何关于入口点的信息。换句话说,裸金属系统并没有"切入点"的概念。所以-e-main选项不适用于二进制文件。
有很多方法可以将C函数放置在固定地址上。我只是发布了我的解决方案
-
在用户定义的部分声明主函数
int main()属性((部分(".main"))
-
使用链接器脚本,将节.main放在所需的地址上。
截面{.=0x0000.text:{led.o(.main)*(.text)}。。。。。。。。}