gpt4 book ai didi

c - 如何在 microblaze 中为固定地址编译库

转载 作者:行者123 更新时间:2023-11-30 16:53:40 25 4
gpt4 key购买 nike

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

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

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

任何帮助将不胜感激。提前致谢。

最佳答案

你写了一个linker script ,并告诉编译器/链接器通过使用 -T script.ld 选项来使用它(对于 gcc 和/或 ld,具体取决于如何构建固件文件)。

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

如果您仅为库创建单独的固件文件,则无需将属性添加到代码中,只需编写链接器脚本来放置 .text (可执行代码) 、.rodata(只读常量)和.bss(未初始化变量)部分位于合适的地址。

在网络上搜索 microblaze“链接器脚本” 可以找到一些有用的示例,甚至更多指南。其中一些必须适合您的工具。

关于c - 如何在 microblaze 中为固定地址编译库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40792807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com