首先整个uboot启动,可以分为两个部分,一部分是由汇编语言编写的arch级初始化,另一部分为c语言编写的板级初始化
arch初始化
从_start函数入口开始,分别进行:
1、关闭中断,设置SVC模式(svc又称为管理模式,在启动过程中,中断环境并没有完全准备好,也就是中断向量表和中断处理函数并没有完成设置,一旦有中断产生,可能会导致预想不到的问题,或者是程序跑飞。因此,在准备好中断环境之前,需要关闭所有中断。)
2、禁用MMU、TLB
3、初始化一些关键的寄存器,时钟寄存器,看门狗等
板级初始化
从_main()函数开始执行 :
1、堆栈环境的设置
2、代码重定向之前的板级初始化,如定时器,I2C/SPI,串口等
3、进行代码重定向
4、然后就是代码重定向后的板级初始化,emmc , 网络,nandflsh,中断的初始化
5、进入命令行等待状态,等待终端输入命令以及对命令进行处理