我正在尝试将我的_start
功能移动到0x0
,因为它是引导加载程序。
Flash ROM 存在从 0x0 到第一个 128MB (=1Gb),其他内存是 DDR3 RAM,但我们将 RAM 映射到 0x80000000 到 0xFFFFFFFF。
问题在于指令.section ".vect"
,_start
地址没有进入该.vect
部分,而是进入该.text
部分。
_start:
.section ".vect" /* I've tried .section .vect and I've tried moving above _start */
b ResetHandler
b UndefHandler
b SVC_Handler
b PrefetchAbortHandler
b DataAbortHandler
b NotUsedHandler
b IRQ_Handler
b FIQ_Handler
1:
b 1b /* Hang and don't return */
在我的链接器脚本中,MEMORY
命令和开头SECTIONS
是:
MEMORY
{
vect (rx) : o = 0x0, l = 1M
rom (rx) : o = 1M, l = 127M
ram (wx) : o = 0x80000000, l = 0x80000000
}
SECTIONS
{
.vect : ALIGN(64)
{
. = 0x0;
*(.vect*)
VectTableEnd = .;
VectTableSize = SIZEOF(.vect);
} > vect
.... (.text, .bss, .data, .stack, etc are other SECTIONS entries)
}
但无论如何,_start
汇编函数代码都会被塞进标准.text
部分,而不是地址0x0
。有谁知道我出了什么问题?
该代码针对裸机 ARMv7A 机器,编译/链接arm-none-eabi-as/ld
干杯。