链接器:如何在特定地址边界放置数据块

时间:2011-10-13 14:55:51

标签: gcc linker alignment mmu

这可能是一个简单的问题,但我是GNU GCC的链接器文件的初学者(codesourcery arm-none-eabi ver 4.5.2)。

我必须在ARM7处理器和数据表中初始化Mmu,据说Mmu页表必须位于16kbyte(2 ^ 14)边界。

现在我已经找到了这个解决方案,但我几乎可以肯定这不是更有效的解决方案!

ENTRY(_start)

SECTIONS
{
 . = 0x0;
 .text : {_stext = .;
*startall.o (.text)
. = 0x4000;
*MmuSdram0.o (.text)
*(.text)
_etext = .;}
 .data : {_sdata = .;
*(.data) 
_edata = .;}
 .bss : {_sbss = .;
*(.bss) 
_ebss = .;}
}

startall.o是一个包含处理器初始化的汇编文件 下一行,我将地址设置为0x4000(2 ^ 14的边界) MmuSdram0.o包含Mmu页面表 然后按照固件的其余部分进行操作 显然,这个解决方案给我一个startall结束和0x4000之间的差距,这浪费了内存空间(我不喜欢浪费;-)

我要做的是将页面表放在*(。文本)之后,但我不知道如何做以下事情:
*(。text)“except” MmuSdram0.o
我更喜欢让链接器将页表放在下一个可用的2 ^ 14边界而不是自己修复地址。我检查了链接器文档,找到了ALIGN命令,但我不确定如何正确使用它,或者这甚至是符合我需要的命令......

提前致谢!

1 个答案:

答案 0 :(得分:0)

嗯,将__attribute__ (( aligned(16*1024) ))放在分号前面;''您的mmu表声明