gpt4 book ai didi

linux - 为什么我们需要嵌入式设备中的引导加载程序?

转载 作者:IT王子 更新时间:2023-10-29 00:20:18 25 4
gpt4 key购买 nike

我正在 ARM cortex-A8 上使用 ELinux 内核。

我知道引导加载程序如何工作以及它在做什么。但我有一个问题 - 为什么我们需要引导加载程序,为什么要诞生引导加载程序

为什么我们不能在没有bootloader的情况下直接将内核从闪存加载到RAM中?如果我们加载它会发生什么?其实processor是不会支持的,但是为什么要走流程呢?

最佳答案

在 Linux 环境中,引导加载程序负责一些预定义的任务。因为这个问题是标记,我认为 ARM booting可能是有用的资源。具体来说,引导加载程序负责设置一个 ATAG 列表,该列表描述了 RAM 的数量、内核命令行和其他参数。最重要的参数之一是机器类型。使用设备树,可以传递板的完整描述。如果没有一些代码来设置所描述的参数,这使得普通的 ARM Linux 无法启动。

这些参数允许一个 generic Linux 支持多个设备。例如,ARM Debian 内核可以支持数百种不同的主板类型。 Uboot 或其他引导加载程序可以动态确定此信息,也可以为开发板硬编码。

您可能还想看看 bootloader info堆栈溢出时的页面。

基本系统可能能够设置ATAGS 并将NOR 闪存复制到SRAM。但是,它通常比这复杂一点。 Linux 需要 RAM 设置,因此您可能需要初始化 SDRAM Controller 。如果您使用 NAND 闪存,则必须处理坏 block 并且复制 可能比memcpy() 复杂一点。

Linux 通常有一些潜在的驱动程序错误,驱动程序会假定时钟已初始化。例如,如果 Uboot 总是为特定机器初始化以太网时钟,Linux 以太网驱动程序可能会忽略设置此时钟。对于时钟树尤其如此。

有些系统需要 Linux 不支持的引导镜像格式;例如,可以立即初始化硬件的特殊 header ;比如配置 devices 来读取初始代码。此外,通常有需要立即配置的硬件; 引导加载程序 可以快速执行此操作,而 Linux 的正常结构可能会显着延迟此操作,从而导致 I/O 冲突等。

从实用的角度来看,使用引导加载程序更简单。但是,没有什么可以阻止您更改 Linux 的源代码以直接从中引导;虽然它可能就像将 引导加载程序 代码直接粘贴到 Linux 的启动。

另请参阅:Coreboot , Uboot , 和 Wikipedia's comparison . Barebox是一个鲜为人知但结构良好的现代 ARM 引导加载程序。 RedBoot也用于一些ARM系统;内核树支持 RedBoot 分区。

关于linux - 为什么我们需要嵌入式设备中的引导加载程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15548004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com