思考:
对于使用ARM设计的SOC,开机/Reset后的第一条指令是啥?一上电PC指向哪里呢?
总结写在前面:
- aarch64 boot address 是允许设置的,软件可配,根据信号RVBARADDR 具体设计而定
- aarch32 0x00000000(或VBAR) 和 0xffff0000, 二选一,根据VINIT value软件可配
- ARM M系列 boot address 是固定的,比如M4/M0 是0x00000000
详细说明:在aarch64中,exception vector中是没有Reset的。在Reset时,由RVBARADDR信号决定RVBAREL3的值,PC指向的第一条地址从RVBAREL3中读出
在aarch32中,Reset做为exception vector的一部分,芯片复位即PC跳转到向量表的reset offset,那么第一条指令的地址是什么?这就和Exception vectors start相关。而VINITHI信号决定了SCTLR.V的值.
- 对于未实现secure monitore的情况:SCTLR.V = 0 : Exception vectors start=0x00000000 SCTLR.V = 1 : Exception vectors start=0xffff0000
- 对于实现secure monitor的情况:对于secure monitor level, Exception vectors start = MVBAR 对于Normal EL1 level:normal SCTLR.V = 0 : Exception vectors start=normal VBAR normal SCTLR.V = 1 : Exception vectors start=0xffff0000 对于Secure EL1 level:secure SCTLR.V = 0 : Exception vectors start=secure VBAR secure SCTLR.V = 1 : Exception vectors start=0xffff0000
参考:1、 ARMV7-AR的page 1164 2、RVBARADDR信号和VINITHI信号的介绍请参考