首页 > 编程笔记 > 操作系统笔记 阅读:1

Bootloader到底是什么?(新手必看)

当 CPU 上电后,Linux 系统不会立即运行。通常,CPU 会跳转到一个只读存储器(例如 ROM)的指定地址,执行一段初始引导代码(例如 BIOS)。这段代码的任务是完成部分硬件初始化工作,并将控制权交给 Bootloader。Bootloader 进一步完成硬件配置,将 Linux 内核和文件系统加载到内存中,为操作系统启动做好准备。

Bootloader 通常只运行一次,在完成引导后,控制权会转移到内存中加载的 Linux 内核,进行正常的系统运行。Bootloader 通常被称为“引导加载程序”。

Bootloader启动流程

Bootloader 的主要功能是确保系统在启动时能够正确地加载和运行操作系统。其启动流程通常分为以下几个步骤:
  1. CPU上电/复位:当设备上电或复位时,CPU 进入执行模式,开始处理启动流程。
  2. 执行初始引导代码:该代码存储在独立固件(如 BIOS)或 SoC 的 ROM(如 BootROM)中。它的任务是初始化基础硬件,包括内存、I/O 设备,为加载 Bootloader 做好准备。
  3. Bootloader 第一阶段:此阶段,代码进一步初始化硬件资源,尤其是内存控制器,确保核心资源(例如 RAM)正常工作,为操作系统启动做准备。
  4. Bootloader 第二阶段:将Linux内核和文件系统从非易失性存储设备(如闪存、硬盘、SD 卡)或远程网络磁盘中加载到RAM中,为内核执行提供必要的数据和系统环境。
  5. Linux内核执行:当内核被加载到内存中并接管控制权后,开始执行操作系统的引导过程,最终进入系统的正常运行状态,供用户使用。

下图简洁地概述了从 CPU 上电、引导加载程序运行到操作系统加载的全过程,突出了引导加载程序在确保系统正常运行中的关键作用。


图 1 Linux 系统加载流程

常用的Bootloader

市面上的 Bootloader 多种多样,由于 Yocto 项目具备开源属性,兼容的种类越来越多。

Yocto 项目不仅支持为嵌入式 Linux 系统(如 ARM 和 MIPS 架构)构建的 Bootloader,例如 U-Boot,还支持为通用 Linux 系统(例如 x86 架构)构建的 Bootloader,例如 GRUB,GRUB 适用于桌面和服务器系统。

下表列出了常用于引导 Linux 系统的 Bootloader 及其在当前 Yocto 项目中的支持情况。

表:常用的Bootloader类型
Bootloader 支持的常用处理器架构 描述
U-Boot ARM、MIPS、x86、PowerPC Linux 嵌入式设备中最常用的 Bootloader,支持多种硬件平台,灵活且高度可定制,适用于资源受限的嵌入式系统
GRUB x86、x86_64、ARM、UEFI 通用 Linux 系统的标准 Bootloader,支持多操作系统引导,广泛应用于桌面、服务器及 UEFI 系统
SYSLINUX x86、x86_64 轻量级引导加载程序,常用于 USB 或光盘启动,适合简单的引导任务和安装介质引导
barebox ARM、MIPS、PowerPC 嵌入式系统的轻量化 Bootloader,设计简洁,类似于 U-Boot,适用于资源受限的设备
RedBoot ARM、MIPS、x86 早期嵌入式系统使用的 Bootloader,支持网络引导和内存启动,现已逐渐被其他引导程序取代
rEFInd x86_64、ARM (UEFI) 多操作系统引导管理器,支持 UEFI 系统,能够引导 Linux、macOS 和 Windows 操作系统
LILO (Linux Loader) x86、x86_64 早期 Linux 系统的引导加载程序,支持从 MBR 引导,现已逐渐被功能更丰富的 GRUB 所取代
ELILO (EFI LILO) x86、x86_64 (UEFI) 适用于 EFI/UEFI 系统的引导程序,用于启动 Linux 内核,已逐渐被 GRUB2 所取代

相关文章