链接描述文件-RAM和ROM具有相同的存储空间

时间:2018-08-09 06:21:41

标签: c compilation linker linker-errors

我尝试链接二进制文件。在我的系统上,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'指定内存区域

1 个答案:

答案 0 :(得分:0)

  

是否有更方便的方法?

我想到的解决方案是,链接器首先生成程序数据。之后,将填写.data节。 RAM和ROM均以0x0000开头。为避免链接器错误重叠,我在.data节中标记了“ ram AT rom标签”。我的脚本会对此二进制文件进行后期处理,将这两个部分分开,并使用SoC内部编程模块的编程器控制和地址数据标记字节。