并不是先从uboot启动,在这之前,有一段固化在SOC硬件内部的启动代码(一般在CPU里的CODEROM里,这个东西是集成的)
2.它的任务就是初始化储存的接口,建立储存的映射(把设备的地址映射到内存ram里)
具体地,它会根据cpu的管脚的情况和efuse的值,来判断系统的启动方式是从nor,nand,还是sd卡
2.1)nor启动的时候,就把nor flash映射为0000地址,然后系统复位,跳转到uboot的中断向量表的第一行代码=nor的第一段代码去执行
2.2)nand或者sd启动的时候,因为他们不能随机读写,随机读写才可以直接运行代码,因此需要把代码先拷贝到内存中。但是由于此时内存还没有初始化,所以,这时候,会借助芯片内部的sram来代替内存做这个事情,具体地就是,会把保存在nand或者sd头部的通常是长度为4k的代码拷贝进sram,这4K代码运行起来后会执行各种初始化,和拷贝的工作;最后系统要起来的时候,也是在sram里面去先跑的这个拷贝进来的启动代码。
3.cpu里面主要起作用的是它的各级寄存器和逻辑运算单元,我们对启动方式(拨码开关)的设置,本质上是对cpu引脚的设置;而这些固话在cpu内部的启动微码,本质上就是对于cpu管脚设置的判断程序和对应的运行逻辑。