0

我正在尝试将我的_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

干杯。

4

0 回答 0