嵌入式系统启动加载过程:两级搬运跳转

西伯尔 / 2023-09-13 / 原文

通常的启动顺序如下:Boot ROM -> SPL -> BootLoader-> kernel

  • Boot ROM是厂商都无法进行更改,固化在芯片内部的ROM;
    确定用于启动的设备;
    从启动的设备的位置搬移一小段代码(4k/8k/16k)到RAM中运行,即SPL;
  • SPL(Secondary Program Loader)
    SPL 最小代码初始化内存,是一个小型的二进制文件,当系统内存无法完全容纳BootLoader时,需要 SPL 启动BootLoader文件。SPL 是第二个加载(和执行)其他程序的东西。
    功能:
    初始化DDR;
    从启动的设备搬移第二段代码到RAM中,加载BootLoader;(有些SoC是将BootLoader复制到RAM后,再进行DDR初始化;)
  • BootLoader
    • BootLoader vs U-Boot
      BootLoader是嵌入式设备中用来启动操作系统内核的一段程序,是基于特定硬件平台来实现的,不同的处理器架构都有不同的BootLoader。
      U-Boot(Universal BootLoader)是一种通用的BootLoader,可以用于多种嵌入式CPU。
    • 在开发BootLoader之前,先了解一些基本概念和步骤。
      - https://zhuanlan.zhihu.com/p/556181275 提供了一个全面的教程,介绍了BootLoader的基本概念、工作原理、实现方法等。
      - https://zhuanlan.zhihu.com/p/271663577 提供了一个关于BootLoader的简介,介绍了BootLoader的定义、作用、特点等。
      - https://zhuanlan.zhihu.com/p/336441128 提供了一个关于BIOS、UEFI和Boot Loader的文章,介绍了它们之间的区别和联系。
    • 开发BootLoader的资源:
      - https://www.apriorit.com/dev-blog/66-develop-boot-loader 提供了一个全面的教程,介绍了如何编写自己的BootLoader。
      - https://embetronicx.com/tutorials/microcontrollers/stm32/bootloader/bootloader-basics/ 提供了一个STM32 BootLoader教程,介绍了BootLoader的基础知识和实现方法。
      - https://interrupt.memfault.com/blog/how-to-write-a-bootloader-from-scratch 提供了一个从零开始编写BootLoader的教程,介绍了为什么需要BootLoader,如何实现以及如何使BootLoader更有用。

参考:https://zhuanlan.zhihu.com/p/265672867