这可能是一个简单的问题,但我是 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) 之后,但我不知道如何执行以下操作:
*(.text) "except" MmuSdram0.o
我更喜欢让链接器放置页面表在下一个可用的 2^14 边界,而不是自己修复地址。我检查了链接器文档,找到了 ALIGN 命令,但我不确定如何正确使用它,或者这是否适合我需要的命令......
提前致谢!