Bootloader到底是什么?(新手必看)
当 CPU 上电后,Linux 系统不会立即运行。通常,CPU 会跳转到一个只读存储器(例如 ROM)的指定地址,执行一段初始引导代码(例如 BIOS)。这段代码的任务是完成部分硬件初始化工作,并将控制权交给 Bootloader。Bootloader 进一步完成硬件配置,将 Linux 内核和文件系统加载到内存中,为操作系统启动做好准备。
Bootloader 通常只运行一次,在完成引导后,控制权会转移到内存中加载的 Linux 内核,进行正常的系统运行。Bootloader 通常被称为“引导加载程序”。
下图简洁地概述了从 CPU 上电、引导加载程序运行到操作系统加载的全过程,突出了引导加载程序在确保系统正常运行中的关键作用。

图 1 Linux 系统加载流程
Yocto 项目不仅支持为嵌入式 Linux 系统(如 ARM 和 MIPS 架构)构建的 Bootloader,例如 U-Boot,还支持为通用 Linux 系统(例如 x86 架构)构建的 Bootloader,例如 GRUB,GRUB 适用于桌面和服务器系统。
下表列出了常用于引导 Linux 系统的 Bootloader 及其在当前 Yocto 项目中的支持情况。
Bootloader 通常只运行一次,在完成引导后,控制权会转移到内存中加载的 Linux 内核,进行正常的系统运行。Bootloader 通常被称为“引导加载程序”。
Bootloader启动流程
Bootloader 的主要功能是确保系统在启动时能够正确地加载和运行操作系统。其启动流程通常分为以下几个步骤:- CPU上电/复位:当设备上电或复位时,CPU 进入执行模式,开始处理启动流程。
- 执行初始引导代码:该代码存储在独立固件(如 BIOS)或 SoC 的 ROM(如 BootROM)中。它的任务是初始化基础硬件,包括内存、I/O 设备,为加载 Bootloader 做好准备。
- Bootloader 第一阶段:此阶段,代码进一步初始化硬件资源,尤其是内存控制器,确保核心资源(例如 RAM)正常工作,为操作系统启动做准备。
- Bootloader 第二阶段:将Linux内核和文件系统从非易失性存储设备(如闪存、硬盘、SD 卡)或远程网络磁盘中加载到RAM中,为内核执行提供必要的数据和系统环境。
- Linux内核执行:当内核被加载到内存中并接管控制权后,开始执行操作系统的引导过程,最终进入系统的正常运行状态,供用户使用。
下图简洁地概述了从 CPU 上电、引导加载程序运行到操作系统加载的全过程,突出了引导加载程序在确保系统正常运行中的关键作用。

图 1 Linux 系统加载流程
常用的Bootloader
市面上的 Bootloader 多种多样,由于 Yocto 项目具备开源属性,兼容的种类越来越多。Yocto 项目不仅支持为嵌入式 Linux 系统(如 ARM 和 MIPS 架构)构建的 Bootloader,例如 U-Boot,还支持为通用 Linux 系统(例如 x86 架构)构建的 Bootloader,例如 GRUB,GRUB 适用于桌面和服务器系统。
下表列出了常用于引导 Linux 系统的 Bootloader 及其在当前 Yocto 项目中的支持情况。
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 所取代 |