如何确保在裸金属臂的固定地址处的进入功能



我使用的是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函数放置在固定地址上。我只是发布了我的解决方案

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

    int main()属性((部分(".main"))

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

    截面{.=0x0000.text:{led.o(.main)*(.text)}。。。。。。。。}

相关内容

  • 没有找到相关文章

最新更新