我尝试链接二进制文件。在我的系统上,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'指定内存区域
答案 0 :(得分:0)
是否有更方便的方法?
我想到的解决方案是,链接器首先生成程序数据。之后,将填写.data节。 RAM和ROM均以0x0000开头。为避免链接器错误重叠,我在.data节中标记了“ ram AT rom标签”。我的脚本会对此二进制文件进行后期处理,将这两个部分分开,并使用SoC内部编程模块的编程器控制和地址数据标记字节。