【问题标题】:Embedded Linux - Booting phases嵌入式 Linux - 引导阶段
【发布时间】:2011-11-25 12:59:01
【问题描述】:

我想系统化我的 U-Boot/linux 知识。每个嵌入式平台至少需要 2 个引导加载程序阶段是真的吗?或者后续过程会有所不同?

  1. 第一阶段引导加载程序(可以是 U-Boot)存储在处理器内部的 ROM 中,无法更新。它将从内部缓存内存运行。这个 U-Boot 需要(至少):初始化 RAM、初始化外部闪存、初始化串行控制台、读取和运行第二阶段引导加载程序。

  2. 第二阶段引导加载程序(可以是 U-Boot)存储在 RW 闪存中。它将处理以太网、闪存 RW 功能等。此 U-Boot 可以自定义和覆盖。主要任务是将linux内核加载到内存中并运行。

  3. linux 内核启动。

第一阶段引导加载程序是否始终为只读?

【问题讨论】:

    标签: linux embedded embedded-linux u-boot


    【解决方案1】:

    第一阶段引导加载程序不必是只读的 - 但是将只读引导加载程序放入具有某种恢复模式的 ROM 会很有帮助,以防您损坏闪存的读写部分;否则您需要将编程器物理连接到闪存芯片才能恢复。

    【讨论】:

      【解决方案2】:

      在哪里,第一个引导加载程序在很大程度上取决于系统。您可能有某种 USB 可启动设备,它枚举并下载固件以在硬件中全部 ram,然后处理器从该 ram 启动。

      通常是的,第一次启动是某种闪存。最好让第一个引导加载程序超级简单,基本上 100% 没有错误,并且耐用且可靠,也许可以通过串行或其他方式进入,以便您可以使用它来替换第二个/真正的引导加载程序。

      理想情况下,第二个引导加载程序也希望是闪存,第二个引导加载程序想要完成大部分工作,初始化 ddr,设置以太网,如果它想要进行某种基于以太网的调试或文件传输,bootp等。由于明显更大且更复杂,预计它们都会有错误并且需要比主引导加载程序更频繁地升级。希望保护主引导程序不被覆盖,这样您就可以轻松地替换第二个引导加载程序而不会破坏系统。

      所有系统都使用上述内容吗?不,一些/许多可能只使用一个引导加载程序,可能会很早就暂停,以便串行端口上的击键可以中断引导加载程序,将您带到可以重新加载引导加载程序的地方。允许引导加载程序开发的机会更少,但如果你之前搞砸了第一位,包括击键和串行闪存加载程序的事情,仍然有机会。同样,串行加载程序并不总是存在,只是为引导加载程序开发人员提供了便利。通常,后备将是 jtag,或可移动的舞会或其他一些系统方式来进入并在您将舞会重新编程时重新编程(此外,有时与您在生产电路板时第一次在系统中编程的方式相同,某些设计可以在制造过程中使用预编程闪存以节省成本并使用预编程闪存,因此第一次启动就可以工作)。

      linux 引导加载程序不需要任何/所有这些,一个非常非常小的设置 ram,准备命令行或 atags 或其他任何东西并分支到 linux。

      这是一个复杂的问题,因为答案在很大程度上取决于您的系统、处理器、设计工程师(包括您)。传统上,处理器从闪存启动,引导加载程序获取内存和其他一些东西,以便下一段代码可以运行。下一段代码可以来自很多地方,usb、磁盘、flash/rom、ethernet/bootp/tftp、pcie、mdio、spi、i2c 等。在上电复位和 linux 启动之间可以有很多层设计的愿望或要求。

      【讨论】:

        【解决方案3】:

        如果您使用的是 U-Boot,则可以跳过第 2 阶段引导加载程序以加快引导时间。换句话说,第一阶段引导加载程序 (SPL) 将直接加载 Linux 内核,跳过第二阶段引导加载程序 (u-boot)。在 U-Boot 中,这称为Falcon Mode

        【讨论】:

          猜你喜欢
          • 2020-01-16
          • 1970-01-01
          • 2019-04-19
          • 2013-12-23
          • 1970-01-01
          • 1970-01-01
          • 2019-08-24
          • 2014-08-13
          • 1970-01-01
          相关资源
          最近更新 更多