zoukankan      html  css  js  c++  java
  • u-boot spl 学习总结

    什么是SPL?

    SPL(secondary program loader)是一个十分小的bin文件,它是用来引导主u-boot文件。对于一些SRAM很小的SOC,无法一次性加载ROM中的bootloaderSRAM中,因为一般SRAM远远小于bootloader的大小。这时候SPL应运而生了。

    加载过程

    嵌入式系统的SOC内部会有比较小的SRAM,而外部的一般会有DDR或者SDRAM,后面的RAM就是外部RAMSPL会先被加载到SRAM中,然后初始化DDR或者SDRAM,总之会初始化外部的RAM,然后再把主u-boot加载到RAM
    如下图所示:

    1. 图中①是 SPL在u-boot第一阶段的装载程序,初始化最基本的硬件,比如关闭中断,内存初始化,设置堆栈等最基本的操作,设置重定位;
    2. 图中②是会装载主u-boot程序,然后初始化其他板级硬件,比如网卡,nand flash等待,设置u-boot本身的命令和环境变量;
    3. 图中③是加载kernelRAM,然后启动内核;
      在这里插入图片描述

    整体的加载过程:

    下面是StackOverflow上的一个解释:

    这里以OMAP平台为例进行解释(仅提供一些实际背景而不仅仅是理论或常识)。看看初学者的一些事实:

    在基于OMAP的平台上,上电后运行的第一个程序是ROM代码(类似于PC上的BIOS)。
    ROM代码查找引导加载程序(必须是名为“MLO”的文件,位于MMC的活动第一个分区,必须格式化为FAT12 / 16/32, - 但这是详细信息)
    ROM代码将该“MLO”文件的内容复制到静态RAM(因为常规RAM尚未初始化)。下图显示了OMAP4460 SoC的 SRAM存储器布局:
    OMAP4460上的SRAM存储器布局
    在这里插入图片描述
    SRAM存储器是有限的(由于物理原因),因此我们只有48 KiB用于引导加载程序。通常,常规引导加载程序(例如U-Boot)二进制文件大于此值。
    因此,我们需要创建一些额外的引导加载程序,它将初始化常规RAM并将常规引导加载程序从MMC复制到RAM,然后将跳转以执行该常规引导加载程序。这个额外的引导加载程序通常称为第一阶段引导加载程序(在两阶段引导加载程序方案中)。
    所以这个第一阶段的引导加载程序是U-Boot SPL ; 和第二阶段的引导加载程序是常规的U-Boot(或适当的U-Boot)。需要说明的是:SPL代表二级程序加载器。这意味着ROM代码是加载(和执行)其他程序的第一件事,而SPL是加载(和执行)其他程序的第二件事。所以通常启动顺序是下一个:ROM code - > SPL - > u-boot - > kernel。实际上它与PC启动非常相似,它是:BIOS - > MBR - > GRUB - > kernel。

    UPDATE

    为了使事情完全清楚,这里是描述启动顺序的各个阶段表(明确使用术语可能的不确定性):

    +--------+----------------+----------------+----------+
    | Boot   | Terminology #1 | Terminology #2 | Actual   |
    | stage  |                |                | program  |
    | number |                |                | name     |
    +--------+----------------+----------------+----------+
    | 1      |  Primary       |  -             | ROM code |
    |        |  Program       |                |          |
    |        |  Loader        |                |          |
    |        |                |                |          |
    | 2      |  Secondary     |  1st stage     | u-boot   |
    |        |  Program       |  bootloader    | SPL      |
    |        |  Loader (SPL)  |                |          |
    |        |                |                |          |
    | 3      |  -             |  2nd stage     | u-boot   |
    |        |                |  bootloader    |          |
    |        |                |                |          |
    | 4      |  -             |  -             | kernel   |
    |        |                |                |          |
    +--------+----------------+----------------+----------+
    

    所以我只是使用bootloader作为U-Boot的同义词,而程序加载器作为加载其他程序的任何程序的通用术语。

    参考:

    what is the use of SPL (secondary program loader)

    u-boot SPL的理解

    TPL: SPL loading SPL(and, SPL as just another U-Boot config)

  • 相关阅读:
    web架构设计经验分享(转)
    家庭反对死一批,朋友同事嘲笑死一批,害怕失败死一批,徘徊等待死一批「没有时间」又死一批(转)
    java.lang.ClassCastException: java.lang.NoClassDefFoundError cannot be cast to java.lang.RuntimeException
    Android 代码混淆、第三方平台加固加密、渠道分发 完整教程(转)
    xcode armv6 armv7 armv7s arm64
    使用collectd与visage收集kvm虚拟机性能实时图形
    【OpenCV入门指南】第一篇 安装OpenCV
    《自己动手写CPU》写书评获赠书活动结果
    winzip15.0注冊码
    Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁可是不能切换
  • 原文地址:https://www.cnblogs.com/unclemac/p/12783383.html
Copyright © 2011-2022 走看看