来自 .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
这样:
- 它有一个新的
.bssFAST
部分(objcopy --add-section
应该有效)和
- 更改
some_variable
使其位于新的部分(这应该相对容易 - 更新 .st_shndx
应该可以做到)。
我有一个巨大的 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
这样:
- 它有一个新的
.bssFAST
部分(objcopy --add-section
应该有效)和 - 更改
some_variable
使其位于新的部分(这应该相对容易 - 更新.st_shndx
应该可以做到)。