2011-09-26 16 views
11

我想系统化我的U-Boot/linux知识。在每个嵌入式平台中是否需要至少2个引导加载程序阶段?或者下面的过程可以改变吗嵌入式Linux - 引导阶段

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

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

  3. linux内核启动。

第一阶段自举程序总是只读吗?

回答

11

其中,第一个引导加载程序如何依赖于系统。您可能有某种USB启动设备,枚举并下载固件,以硬件形式提供所有内容,然后处理器从该内存启动。

通常情况下,第一次启动是某种形式的闪存。这是一个好主意,让第一个引导加载程序非常简单,基本上100%的错误免费,耐用,可靠,可能串行或其他方式进入,以便您可以用它来代替第二个/真正的引导加载程序。

理想情况下,第二个引导加载程序也希望是flash,第二个引导加载程序会想要完成大部分工作,初始化ddr,如果想要进行某种基于以太网的调试或传输文件, bootp等等。由于体积更大,更复杂,预计它们都会有缺陷,并且需要比主引导加载程序更经常升级。小学生有望免于被覆盖,这样您就可以轻松地更换第二个引导加载程序,而不会堵塞系统。

是否所有系统都使用上述?不,一些/许多人可能只能使用一个引导加载程序,因为可能会很早就暂停,因此串行端口上的按键可能会中断引导加载程序,从而将您带到可以重新加载引导加载程序的位置。允许开发人员开发砖块的可能性较小,但如果你之前搞砸了第一块,包括按键和串行闪存加载器,那么仍然有机会。这里再次提到串行加载器的东西并不总是存在,只是引导加载程序开发人员的方便。通常情况下,后备将会是jtag,或者是一个可移动的舞会或其他系统方式,以便在您制作舞台时进入并重新编程舞台(有时也与您在制作舞台时第一次在系统中进行编程的方式相同,某些设计可以节省成本,并在制造过程中使用预编程的闪光灯,以便首次启动)。

一个Linux的引导程序不需要任何/所有这一切,一个非常非常小的,设置RAM,预习命令行或atags或任何和分支到Linux。

这是一个加载的问题,因为答案严重依赖于您的系统,处理器,设计工程师(包括您)。传统上,处理器从闪存引导,引导加载程序获取内存和其他一些内容,以便下一代代码可以运行。接下来的代码可以来自许多地方,USB,磁盘,闪存/光盘,以太网/ bootp/tftp,pcie,mdio,spi,i2c等。开机复位和linux之间可以有多层设计需要或需要。

6

第一阶段的引导程序不必是只读的 - 但只是一个只读bootloader的一些恢复模式ROM是有帮助的情况下,你破坏读写闪存的部分;否则你需要物理连接一个编程器到闪存芯片才能恢复。

4

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