Redboot 启动过程
1.Reset 入口点:0x0
传递控制权到ROM的入口处:reset_vector。
2.调用宏PLATFORM_SETUP1,完成下面的工作:
-
关中断
-
禁能以及清除caches
-
初始化内存控制器(可能包括检查内存位置)
-
设置时钟频率
-
初始化MMU table
-
设置TTBR和DACR为默认值
-
映射MMU table到内存
-
DRAM at 0x00000000 cacheable/buffered
-
Device registers elsewhere uncacheable/unbuffered usually 1-1
-
DRAM at 0xF0000000 uncacheable/unbuffered (1-1 in aaed2000)
-
remap ROM at 0 elsewhere
-
-
-
使能MMU
-
为启动ROMRAM重定位镜像到RAM
-
多CPU时设置其他CPU
3.跳转到HAL启动
- 设置中断向量表在 0+ 位置
- 拷贝数据段(.data section)到RAM
- 初始化CPSR和SPSR
- 设置SP
- 清除 .bss
-
如果包括GDB stubs的话则调用initialize_stub()
-
调用hal_ctrlc_isr_init() //rom版本的Redboot不支持ctrl-c
-
调用cyg_hal_invoke_constructors()
-
调用cyg_start()