转载于 :
https://www.cnblogs.com/tureno/articles/6639461.html
我们知道uboot分为BL0, BL1, BL2。其中BL0就是我们常说的ROM Code。BL1就是我们常说的SPL1,BL2就是我们常说的狭义的uboot。其中SPL 和uboot共用一个源码体系。他们之间的产生是通过一个重要的宏CONFIG_SPL_BUILD来在源码中分开的。
SPL
SPL是uboot第一阶段执行的代码. 主要负责搬移uboot第二阶段的代码到内存中运行. SPL是由固化在芯片内部的ROM引导的. 我们知道很多芯片厂商固化的ROM支持从nandflash, SDCARD等外部介质启动. 所谓启动, 就是从这些外部介质中搬移一段固定大小(4K/8K/16K等)的代码到内部RAM中运行. 这里搬移的就是SPL. 在最新版本的uboot中, 可以看到SPL也支持nandflash, SDCARD等多种启动方式. 当SPL本身被搬移到内部RAM中运行时, 它会从nandflash, SDCARD等外部介质中搬移uboot第二阶段的代码到外部内存中.