首页 > 解决方案 > 链接描述文件 - RAM 和 ROM 相同的内存空间

问题描述

我尝试链接二进制文件。在我的系统上,RAM 和 ROM 地址空间是重叠的,但在不同的总线上(指令总线与数据总线)。

所以我的目标是得到两个二进制文件。一个带有 ROM 内容(程序),一个带有 RAM 内容(.data 部分)。我猜链接器不能一次生成这两个文件。我的想法是进行两次单独的链接器运行,但问题是例如在“RAM 运行”上它错过了 .text 部分。有没有更方便的方法来做到这一点?

这是我第二次运行的脚本:

OUTPUT_ARCH( "riscv" )

/* initialize helper variables */
RAMSIZE = $RAMSIZE;
RAM_OFFSET = $RAMOFFSET;

MEMORY {
  ram (!rx) : ORIGIN = RAM_OFFSET, LENGTH = RAMSIZE /* size of Data Memory and offset */
}

SECTIONS {
  .sdata : { *(.sdata) } > ram              /* global/static variables */
}

我收到以下错误:错误:没有为可加载部分“.text”指定内存区域

标签: ccompilationlinkerlinker-errors

解决方案


有没有更方便的方法来做到这一点?

我得出了链接器首先生成程序数据的解决方案。之后,它会填充 .data 部分。RAM 和 ROM 都以 0x0000 开头。为了避免重叠的链接器错误,我用“ram AT rom 标签”标记了 .data 部分。我的一个脚本后处理这个二进制文件,将这两个部分分开,并用程序员控制和地址数据标记字节,用于 SoC 内部编程模块。


推荐阅读