用LD在特定地址加载数据的正确方法是什么?

时间:2019-04-02 08:11:58

标签: ld

我正在尝试将部分代码加载到使用LD生成的ROM的特定地址上。 ROM大小设置为0x4000

我混合了C和ASM代码,这些代码是通过GCC编译/汇编的。 我要链接到特定地址的零件正在组装中。

我阅读了LD手册,然后编辑了链接脚本的SECTIONS部分,并在我的asm代码上添加了.section .assets。

我的链接脚本已经指定了.text,.data,.bss并可以正常工作。 在.text部分的0x2000上,我要加载.assets部分。

我尝试了3种方法

1 /专用部分

.text { *(.text) } >ROM
.assets 0x2000 { *(.assets) }

使用nm,我看到我的const数据定义为0x2000,但实际上,数据本身不存在...地址正确,数据为空

  • PRO:明确设置哪个部分地址
  • PRO:通用
  • CON:不起作用!

2 /原始加载

.text { *(.text) } >ROM
.assets 0x2000 { assets.o } >ROM

使用nm,地址正确且有数据

  • CON:不是通用的,我必须列出每个文件
  • CON:assets.asm中的资产没有任何意义
  • CON:不确定.text大小是否正确

3 / .text内

.text
{
  *(.text)
  . = 0x2000;
  *(.assets)
}  >ROM

使用nm,地址正确且有数据

  • PRO:.text大小正确
  • CON:*(。text)的大小大于0x2000时不会检测

因此,尽管我有办法实现自己想要的目标,但我仍然感觉不对。

那么,如何在不破坏.text节大小的情况下,将任何file.o的每个(.assets)加载到ROM的特定地址?

0 个答案:

没有答案