1、关闭中断,设置svc模式禁用MMU、TLB关键寄存器的设置,包括时钟、看门狗的寄存器
2、堆栈环境的设置代码重定向之前的板级初始化,包括串口、定时器、环境变量、I2C\SPI等等的初始化
3、进行代码重定向代码重定向之后的板级初始化,包括板级代码中定义的初始化操作、emmc、nand flash、网络、中断等等的初始化。
4、进入命令行状态等待终端输入命令以及对命令进行处理上述工作,也就是uboot流程的核心。
5、疑问在spl的阶段中已经对arch级进行了初始化了,为什么uboot里面还要对arch再初始化一遍? 回答:spl对于启动uboot来说并不是必须的,在某些情况下,上电之后uboot可能在ROM上或者flash上开始执行而并没有使用spl。这些都是取决于平台的启动机制。因此uboot并不会考虑spl是否已经对arch进行了初始化操作,uboot会完整的做一遍初始化动作,以保证cpu处于所要求的状态下。
6、spl在启动过程的差异在哪里?回答:以tiny210而言,前期arch的初始化流程基本上是一致的,出现本质区别的是在board_init_f开始的。
7、代码入口project-X/u-boot/arch/arm/cpu/u-boot.lds