NORFLASH启动UBOOT
将uboot存储在norflash中启动,主要流程是硬件初始化,设置栈,完成重定位,赋值uboot到ddr中运行,初始化外设,最后进入main_loop循环或引导操作系统启动内核。
uboot启动流程:
第一阶段:
从地址0x00000000处取出第一条指令。
当运行C语言时,形参和局部变量需要入栈,栈顶设置SRAM的顶端,为C程序提供运行环境。
完成对gd_t*gd_ptr赋值(存储着uboot镜像的长度,重定位地址等信息)。
第二阶段:
将uboot镜像赋值到SDRAM中控功能(重定位地址由gd_t*gd_ptr提供),根据重定位偏移量得到新的PC指针值,在DDR中继续运行uboot。
第三阶段:
在DDR中继续运行的uboot完成对ARM处理器以及各外围硬件的初始化(例如:SPI、I2C、网卡等)。
最终uboot进入main_loop,阻塞等待串口中断输入命令或者去启动内核。
总结:uboot的作用就是通过Flash和Sram初始化时钟和DDR(arm最小系统),最终是要在ddr中运行裸机调试或者引导操作系统启动内核。