来自 .bss 部分的一个变量的不同内存

Different memory for one variable from .bss section

我有一个巨大的 DDR 内存 (2GB),访问时间很长,还有一个很小的内部 RAM (1MB),访问时间很短。此时我在 DDR 中有整个 .bss 部分。 .bss 部分包含一个来自外部库的常用变量。我怎样才能将它从慢速 DDR 转移到快速 RAM?无法将整个 .bss 放入 RAM 中,而且我也无法修改外部库。

Disassembly of section .bss:
8000008c <some_variable>
.bss (NOLOAD) : {
   . = ALIGN(4);
   __bss_start = .;
   *(.bss)
   *(.bss.*)
   *(.gnu.linkonce.b.*)
   *(COMMON)
   . = ALIGN(4);
   __bss_end = .;
} > DDR

我试过类似的方法,但没用。

.bssFAST (NOLOAD) : {
   . = ALIGN(4);
   file.o:some_variable(.bss)
   . = ALIGN(4);
} > RAM

I tried someting like that, but its not work.

那行不通:链接器在变量级别不起作用,它在 .

上起作用

如果 foo.o.bss 部分不是太大,您可以将整个部分移动到 .bssFAST.

如果您做不到,您唯一的选择是 binary-patch foo.o 这样:

  1. 它有一个新的 .bssFAST 部分(objcopy --add-section 应该有效)和
  2. 更改 some_variable 使其位于新的部分(这应该相对容易 - 更新 .st_shndx 应该可以做到)。