SPL是uboot第一阶段执行的代码。 主要负责搬移uboot第二阶段的代码到内存中运行。 这么做的原因是芯片一般支持多种类型DDR,RomBoot 不知道接的是什么DDR无法对其初始化,SPL作为比较小的固件(4K/8K/16K等),可以被搬到内部RAM运行,SPL初始化好外部RAM,再把uboot搬移到DDR上运行。 通过设置芯片启动相关的引脚电平,...
同大多数的Bootloader一样,uboot的启动过程也分为BL1、BL2两个阶段,分别对应着SPL和Uboot。 SPL(BL1阶段):负责开发板的基础配置和设备初始化,并且搬运Uboot到内存中,由汇编代码和少量的C语言实现 Uboot(BL2阶段):主要负责初始化外部设备,引导Kernel启动,由纯C语言实现。 我们这篇文章,主要介绍Uboot(BL2阶段)的...
所以说在编译SPL的代码的过程中,CONFIG_SPL_BUILD这个宏是打开的。 uboot-spl和uboot的代码是通用的,其区别就是通过CONFIG_SPL_BUILD宏来进行区分的。 二、uboot-spl需要做的事情 CPU初始刚上电的状态。需要小心的设置好很多状态,包括cpu状态、中断状态、MMU状态等等。 在armv7架构的uboot-spl,主要需要做如下事...
[plain] view plain copyCONFIG_SPL_BUILD := y export CONFIG_SPL_BUILD export CONFIG_SPL_BUILD: 在接下来的编译中, 这个变量为y. 从后面的分析中可以看到, uboot的stage1, stage2阶段的代码用的是同一个Start.S, 只不过在Start.S中用#ifdef CONFIG_SPL_BUILD这种条件编译来区分。 类似的还有其他一些文...
uboot-spl理解 uboot分为uboot-spl和uboot两个组成部分。SPL是Secondary Program Loader的简称,第二阶段程序加载器,这里所谓的第二阶段是相对于SOC中的BROM来说的,之前的文章已经有所介绍,SOC启动最先执行的是BROM中的固化程序。 BROM会通过检测启动方式来加载第二阶段bootloader。uboot已经是一个bootloader了,那么...
SPL是uboot第一阶段执行的代码。 主要负责初始化芯片,搬移uboot第二阶段的代码到内存中运行。 SPL是由固化在芯片内部的ROM引导的。 所谓启动, 就是从这些外部介质中搬移一段固定大小(4K/8K/16K等)的代码到内部RAM中运行。 这里搬移的就是SPL. 在最新版本的uboot中, 可以看到SPL也支持nandflash, SDCARD等多种...
SPL(Secondary programloader)是uboot第一阶段执行的代码。主要负责搬移uboot第二阶段的代码到系统内存(System Ram,也叫片外内存)中运行。是uboot第一阶段执行的代码。 主要负责初始化芯片,搬移uboot第二阶段的代码到内存中运行。 SPL是由固化在芯片内部的ROM引导的。
BootROM中的固化程序–>> uboot 第一阶段(SPL)–>> uboot第二阶段 。 uboot spl的存在的原因是对于一些SOC来说,它的内部SRAM可能会比较小(一般小于110KB),小到无法装载下一个完整的uboot镜像(通常为几百KB),那么就需要spl,它主要负责初始化外部RAM和环境,并加载真正的uboot镜像到外部RAM中来执行。
当选择从nand flash启动时,spl为第一阶段,copy前4K到iram,然后完成初始化ddr后,重定位,跳转到ddr,copy剩余uboot到ddr,开始启动第二阶段。
U-Boot启动流程主要包括三个阶段:启动ROM代码、启动SPL(Secondary Program Loader)和启动U-Boot。 首先,当嵌入式设备上电后,处理器会首先执行固定在芯片内部的启动ROM代码。这些代码主要完成一些基本的硬件初始化工作,例如设置栈指针、初始化外设等。然后,启动ROM代码会从预定义的启动设备(例如闪存、SD卡等)中加载SPL...