深入了解嵌入式系统引导加载程序
1. 引导加载程序的作用
在嵌入式 Linux 系统中,引导加载程序扮演着至关重要的角色,它主要有两项核心任务:一是将系统初始化到基本可用状态,二是加载操作系统内核。实际上,第一项任务是为第二项任务服务的,只需让系统达到能够加载内核的程度即可。
当系统上电或复位后,引导加载程序的代码开始执行。此时,系统处于非常原始的状态,DRAM 控制器尚未配置,主内存无法访问;其他接口也未进行初始化,通过 NAND 闪存控制器、MMC 控制器等访问的存储设备也无法使用。通常,初始时仅有一个 CPU 核心和一些片上静态内存处于工作状态。
因此,系统的启动过程会分为多个阶段,每个阶段逐步让更多的系统组件投入运行。引导加载程序的最终操作是将内核加载到 RAM 中,并为其创建执行环境。引导加载程序与内核之间的接口细节因架构而异,但一般来说,它需要完成两件事:一是传递一个指向包含硬件配置信息的结构体的指针,二是传递一个指向内核命令行的指针。内核命令行是一个 ASCII 字符串,用于控制 Linux 的行为。一旦内核开始执行,引导加载程序就不再需要,其所占用的内存也会被回收。
此外,引导加载程序还有一个辅助任务,即提供一个维护模式,用于更新引导配置、将新的引导镜像加载到内存中,甚至运行诊断程序。这通常通过一个简单的命令行用户界面来控制,常见的是通过串行接口进行操作。
2. 引导序列
在过去较为简单的时期,只需将引导加载程序放置在处理器复位向量对应的非易失性内存中即可。当时,NOR 闪存很常见,由于它可以直接映射到地址空间,因此是理想的存储方式。以下是这种配置的示意图:
超级会员免费看
订阅专栏 解锁全文
1650

被折叠的 条评论
为什么被折叠?



