cha*_*inz 18 linux embedded arm bootloader
我在ARM cortex-A8上使用ELinux内核.
我知道引导加载程序的工作原理以及它正在做什么工作.但我有一个问题 - 为什么我们需要bootloader,为什么bootloader诞生了?
为什么我们不能在没有bootloader的情况下直接从闪存中将内核加载到RAM中?如果我们加载它会发生什么?事实上,处理器不会支持它,但为什么我们遵循这个程序呢?
art*_*ise 14
在Linux环境中,引导加载程序负责某些预定义任务.由于这个问题是arm标记的,我认为ARM启动可能是一个有用的资源.具体来说,引导加载程序负责设置一个ATAG描述RAM数量,内核命令行和其他参数的列表.最重要的参数之一是机器类型.使用设备树,可以传递完整的电路板描述.这使得ARM Linux无法启动,无需使用一些代码来设置参数,如上所述.
这些参数允许一个通用 Linux支持多个设备.例如,ARM Debian内核可以支持数百种不同的板类型. Uboot或其他引导加载程序可以动态地确定此信息,或者可以对该板进行硬编码.
您可能还希望在堆栈溢出时查看引导加载程序信息页面.
基本系统可能能够设置ATAGSNOR闪存并将其复制到SRAM.但是,它通常比这复杂一点.Linux需要RAM设置,因此您可能必须初始化SDRAM控制器.如果你使用NAND闪存,你必须处理坏块,副本可能比复杂一点memcpy().
Linux经常有一些潜在的驱动程序错误,驱动程序会假设时钟已初始化.例如,如果Uboot总是初始化特定机器的以太网时钟,则Linux以太网驱动程序可能忽略了设置此时钟.对于时钟树来说尤其如此.
某些系统需要Linux不支持的引导映像格式; 例如,可以立即初始化硬件的特殊标头; 比如配置devices从中读取初始代码.此外,通常还有应立即配置的硬件; 一个引导装载程序可以很快做到这一点,而Linux的正常结构可以显著延缓这个导致I/O冲突,等等.
从实用的角度来看,使用引导加载程序更简单.但是,没有什么可以阻止你改变Linux的源代码直接从它启动; 虽然它可能就像将引导加载程序代码直接粘贴到Linux的开头一样.
另请参阅:Coreboot,Uboot和Wikipedia的比较.Barebox是ARM的一个鲜为人知但结构良好且现代的引导加载程序. RedBoot也用于某些ARM系统; 内核树支持RedBoot分区.
Bar*_*icz 13
引导加载程序是一种计算机程序,它在完成自检后为计算机加载主操作系统或运行时环境.
^ 来自维基百科文章
所以基本上bootloader正在做你想要的 - 将数据从闪存复制到操作内存.这真的很简单.
如果您想了解有关提升操作系统的更多信息,我强烈建议您阅读链接文章.除了测试之外,引导阶段还包括检查外围设备和其他一些东西.跳过它们只对非常简单的嵌入式设备有意义,这就是为什么它们的引导加载程序更简单:
某些嵌入式系统不需要明显的引导顺序即可开始工作,并且当打开时可能只是运行存储在ROM中的操作程序.
相同的来源
主引导加载程序通常内置于芯片中,并执行将在系统中运行的第一个用户代码的加载。
引导加载程序的存在是因为没有用于加载第一个代码的标准化协议,因为它依赖于芯片。有时可以通过串行端口、闪存甚至硬盘驱动器加载代码。它是引导加载程序功能来定位它。
一旦用户代码被加载并运行,引导加载程序就不再使用,系统执行的正确性是用户的责任。
在嵌入式 linux 链中,主引导加载程序将设置并运行 Uboot。然后Uboot会找到linux内核并加载它。
| 归档时间: |
|
| 查看次数: |
21786 次 |
| 最近记录: |