我想系统化我的U-Boot / linux知识。每个嵌入式平台至少需要两个引导加载程序阶段吗?还是以下过程会有所不同?
第一级引导程序(可以是U-Boot)存储在处理器ROM的内部,无法更新。它将从内部缓存运行。该U-Boot需要(至少):初始化RAM,初始化外部闪存,初始化串行控制台,读取并运行第二阶段引导程序。
第二阶段引导程序(可以是U-Boot)存储在RW闪存中。它将处理以太网,闪存RW功能等。此U-Boot可以自定义和覆盖。主要任务是将linux内核加载到RAM中并运行它。
linux内核启动。
1级引导加载程序是否始终是只读的?
哪里,第一个引导程序如何很大程度上取决于系统。您可能具有某种USB引导设备,该设备会枚举并下载固件以将其全部加载到硬件中,然后处理器从该ram启动。
通常是的,第一次启动是某种形式的闪存。最好使第一个引导加载程序超级简单,基本上100%无错误,经久耐用且可靠,并且可能采用串行或其他方式插入,以便您可以用它代替第二个/实际的引导加载程序。
理想情况下,第二个引导加载程序也要刷新,第二个引导加载程序要完成大部分工作,初始化ddr,如果要进行基于以太网的调试或文件传输,bootp等,则设置以太网。与主要的引导加载程序相比,由于它的体积更大且更加复杂,因此预计会存在错误并且需要更频繁地进行升级。希望可以保护主引导程序,使其不被覆盖,以便您可以舒适地替换第二个引导加载程序,而不会阻塞系统。
所有系统都使用上述内容吗?不,某些/很多人可能只使用一个引导程序,并且可能很早就暂停了,以便串行端口上的击键会中断引导程序,从而使您到达可以重新加载引导程序的位置。允许进行引导加载程序开发,发生阻塞的机会更少,但是如果您在击键和串行闪存加载程序之前弄乱了第一位,那仍然是一个机会。同样,串行加载程序并不总是存在,只是对引导加载程序开发人员而言是一种便利。通常,后备将是jtag,或者是可移动的Prom或某种其他系统方式,可以在对Brom进行砌块时进入并重新编程Prom(有时,与在制作电路板时第一次在系统中进行编程的方式相同,
linux bootloader不需要任何/所有这些,这是一个非常小的安装ram,可以准备命令行或标签或其他东西并分支到linux。
由于答案在很大程度上取决于您的系统,处理器,设计工程师(包括您),因此这是一个非常棘手的问题。传统上,处理器是从闪存启动,而引导加载程序会获取内存和其他一些东西,以便可以运行下一部分代码。接下来的代码可以来自许多地方,例如USB,磁盘,闪存/ ROM,以太网/ bootp / tftp,pcie,mdio,spi,i2c等。开机复位和linux启动之间可以有尽可能多的层设计的需求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句