链接描述文件 - RAM 和 ROM 相同的内存 Space
Linker Script - RAM and ROM same Memory Space
我尝试link一个二进制文件。在我的系统上,RAM 和 ROM 地址空间重叠,但在不同的总线上(指令总线与数据总线)。
所以我的目标是得到两个二进制文件。一个是 ROM 内容(程序),一个是 RAM 内容(.data 部分)。我猜想 linker 不能同时生成这两个文件。我的想法是做两个单独的 linker 运行s 但问题是在 'RAM run' 例如它错过了 .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”指定内存区域
Is there a more conveniant way to do this?
我找到了链接器先生成程序数据的解决方案。之后,它会填充 .data 部分。 RAM 和 ROM 都以 0x0000 开头。为了避免重叠链接器错误,我用 "ram AT rom tag" 标记了 .data 部分。我的一个脚本 post 处理这个二进制文件,将这两部分分开,并用程序员控制和 SoC 内部编程模块的地址数据标记字节。
我尝试link一个二进制文件。在我的系统上,RAM 和 ROM 地址空间重叠,但在不同的总线上(指令总线与数据总线)。
所以我的目标是得到两个二进制文件。一个是 ROM 内容(程序),一个是 RAM 内容(.data 部分)。我猜想 linker 不能同时生成这两个文件。我的想法是做两个单独的 linker 运行s 但问题是在 'RAM run' 例如它错过了 .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”指定内存区域
Is there a more conveniant way to do this?
我找到了链接器先生成程序数据的解决方案。之后,它会填充 .data 部分。 RAM 和 ROM 都以 0x0000 开头。为了避免重叠链接器错误,我用 "ram AT rom tag" 标记了 .data 部分。我的一个脚本 post 处理这个二进制文件,将这两部分分开,并用程序员控制和 SoC 内部编程模块的地址数据标记字节。