同事最近定位问题,发现如果pc指针变成0xfffffffc时,系统就会复位。看了一下,发现0xfffffffc处是一个跳转指令,在PPC系统的启动过程中,C系统加电或者接收到复位信号之后,就会执行此处的指令。相应的BSP代码romStart.S中代码如下:
- .section .boot, "ax", @progbits
-
FUNC_BEGIN(resetEntry)
-
FUNC_LABEL(_resetEntry)
- 此处省略很多指令
-
-
.section .reset, "ax", @progbits
-
FUNC_BEGIN(resetVector)
-
b resetEntry
-
FUNC_END(resetVector)
通过.section.reset在0xfffffffc处生成
b resetEntry
的指令,达到加载的目的。当然了,调用0xfffffffc就会导致系统复位了。下面是link中的代码。
- .reset BIND(wrs_kernel_text_start + wrs_kernel_rom_size - 4) :
-
{
-
*(.reset)
-
}
号外的是,直接调用0xfffffffc会由于一些寄存器没有初始化好,cache与tlb还有些其它寄存器如MSR没有正确初始化,会导致CPU挂死,这时,可以依赖watchdog产生复位信号,从而成功初始化CPU。
阅读(2793) | 评论(0) | 转发(0) |