如何在microblaze中编译固定地址的库

时间:2016-11-24 18:35:29

标签: c gcc microblaze

我想构建一个可重定位的库(即除了局部变量之外的任何东西。我还想强制库的位置在内存中的固定位置。我认为这必须在makefile中完成,但我很困惑,我必须做什么来强制在一个固定的位置加载库。这是使用mb-gcc。

我需要这个的原因是我想写一个加载器,我不想破坏实际上正在执行其他程序副本的代码。所以我希望正在进行复制的程序位于其他位置未使用的位置(即ddr)。

如果我拥有编译到库中的所有函数,那么我需要使用哪些特殊的makefile参数来强制将其加载到0x80000000位置。

非常感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您编写linker script,并使用-T script.ld选项(gcc和/或ld告诉编译器/链接器使用它,具体取决于您的方式构建固件文件。)

在您的库C源文件中,您可以使用__attribute__((section ("name")))语法将functionsvariables放入特定的部分。然后,链接描述文件可以决定将每个部分放在何处 - 通常位于这些类型设备的固定地址。 (您经常会看到像#define FIRMWARE __attribute__((section(".text.firmware")))或类似的宏声明,以使代码更易于阅读和理解。)

如果您只为库创建单独的固件文件,则无需将属性添加到代码中,只需编写链接描述文件以放置.text(可执行代码),{{1 (适用的常量)和.rodata(未初始化的变量)部分在适当的地址。

.bss的网络搜索会找到一些有用的示例,甚至还有更多指南。其中一些必须适合您的工具。