Bootloader详解

Bootloader启动流程

以上是一个展示Bootloader结构和启动流程的逻辑图。该流程涉及以下几个步骤:

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

这个流程概述了从硬件启动到操作系统加载的全过程,突出了引导加载程序的关键角色。
在这里插入图片描述

分类方法

分类的依据

系统架构: Bootloaders通常根据支持的硬件架构进行分类。例如,U-Boot广泛用于嵌入式系统(ARM、MIPS等),而GRUB则主要用于x86架构的桌面和服务器系统。这种分类方式普遍出现在各个项目的官方文档中。例如,U-Boot官网中会明确提到它对不同硬件架构的支持。

启动模式: Bootloaders也可以根据启动模式进行分类,比如是否支持BIOS或UEFI启动模式。GRUB支持BIOS和UEFI启动,而systemd-boot则专门为UEFI系统设计。这种分类通常可以在Linux内核文档或GRUB等项目的官网找到。

功能: Bootloaders还可以按功能来分类,如是否支持多操作系统引导、嵌入式系统启动、调试功能等。例如,rEFInd专注于多操作系统管理,U-Boot专注于嵌入式设备的启动和硬件初始化。各项目官网也会根据功能描述引导加载程序的应用场景。

正规分类的来源

开源项目文档:大部分Bootloader的分类依据可以从开源项目的官方文档中得出。例如,U-Boot、GRUB、Coreboot等项目的官网和文档中都有详细描述它们支持的架构、功能和应用场景。
Linux内核文档:许多与Bootloader相关的技术分类和说明可以在Linux内核文档中找到,它们为不同平台和硬件初始化提供了规范和指导。
嵌入式系统文档:嵌入式系统领域的技术书籍和BSP(Board Support Package)文档中也会对Bootloader进行不同角度的分类,特别是针对特定硬件的支持和启动流程。

General的分类

Bootloaders的数量并没有一个固定的总数,因为它们是根据不同的系统需求硬件架构和应用场景开发的目前有许多不同的引导加载程序可用于各种平台和操作系统以下是一些主要的被广泛使用的bootloaders类别

1 桌面和服务器系统引导加载程序

  • GRUB Grand Unified Bootloader
  • SYSLINUX
  • systemd-boot
  • LILO
  • Clover Bootloader
  • Windows Boot Manager

2 嵌入式系统引导加载程序

  • U-Boot Universal Boot Loader
  • Barebox
  • RedBoot
  • Coreboot
  • OpenSBI

3 EFIUEFI引导加载程序

  • GRUB2 支持UEFI
  • rEFInd
  • TianoCore EDK II

4 架构特定引导加载程序

  • Das U-Boot 广泛用于ARM和MIPS
  • OpenSBI RISC-V架构
  • FreeBSD loader FreeBSD系统

每种引导加载程序都有其适用的场景和硬件平台总的来说可能有几十种引导加载程序被广泛使用但如果考虑到定制化的引导加载程序数量还会更多

通用Linux系统的引导加载程序

通用Linux系统的引导加载程序有以下几种:

  1. GNU GRUB(Grand Unified Bootloader):这是通用Linux系统中最常用的引导加载程序,支持多操作系统引导。它提供交互式菜单、图形界面和复杂的内核启动参数配置功能,适合桌面和服务器系统。GRUB支持多种文件系统和链式加载,允许启动其他操作系统,如Windows。

  2. SYSLINUX:这是一个轻量级引导加载程序,特别适合从USB驱动器、光盘等可移动设备引导Linux。SYSLINUX有多个变体,适用于不同的引导场景,如PXELINUX支持网络引导,ISOLINUX适用于光盘引导,EXTLINUX则用于硬盘引导。

  3. systemd-boot:这是一个轻量级的UEFI引导加载程序,适合现代的UEFI系统。它易于配置,适用于不需要复杂引导功能的单一操作系统环境。

  4. LILO(Linux Loader):这是一个较老的引导加载程序,曾在Linux系统中广泛使用,但现在已基本被GRUB取代。LILO适合BIOS启动模式,但功能较为简单,不支持现代引导需求。

嵌入式Linux系统的引导加载程序

  1. U-Boot(Universal Boot Loader):U-Boot是嵌入式Linux系统中最常用的引导加载程序,支持多种硬件架构,如ARM、MIPS等。它能够初始化硬件、加载内核,并支持从多种设备(如SD卡、闪存、网络)启动。U-Boot灵活、模块化,是嵌入式开发的核心工具。

  2. Barebox:这是U-Boot的轻量级分支,专为资源受限的嵌入式设备设计。Barebox保留了U-Boot的核心功能,但代码量更少,适合快速启动和轻量化需求的系统。

  3. RedBoot:RedBoot是一款嵌入式系统引导加载程序,主要用于eCos实时操作系统,支持网络引导和远程调试,广泛应用于工业设备和网络设备中。

  4. Coreboot:Coreboot是一款开源引导加载程序,专注于快速启动和硬件初始化,常用于特定的嵌入式设备,结合SeaBIOS等payload来完成系统引导。

通用和嵌入式bootloader的区别

主要的区别在于:通用Linux系统的引导加载程序功能复杂,支持多操作系统引导和图形界面,而嵌入式系统的引导加载程序则更注重硬件初始化、资源优化和启动速度。

嵌入式Linux系统和通用Linux系统的引导加载程序之间没有严格的界限,但它们的应用场景不同。嵌入式系统的引导加载程序(如U-Boot)通常强调轻量化、快速启动和硬件初始化,而通用系统的引导加载程序(如GRUB)则关注多操作系统引导和高级功能。

通用的例子:
GRUB:主要用于桌面和服务器系统,但可以在某些基于x86架构的嵌入式设备中使用。
U-Boot:广泛用于嵌入式设备,但也可以在某些开发板或服务器平台中实现硬件初始化。

Yocto项目支持状况

下表列出了常用于引导Linux系统的Bootloader及其在当前Yocto项目中的支持情况:
Bootloader 支持的架构 描述 所在Yocto项目常用开源层 官网主页
U-Boot ARM, MIPS, x86, PowerPC Linux嵌入式设备中最常用的Bootloader,支持多种硬件平台,灵活且高度可定制,适用于资源受限的嵌入式系统。 meta/recipes-bsp/u-boot https://www.denx.de/wiki/U-Boot
GRUB x86, x86_64, ARM, UEFI 通用Linux系统的标准Bootloader,支持多操作系统引导,广泛应用于桌面、服务器及UEFI系统。 meta/recipes-bsp/grub https://www.gnu.org/software/grub
SYSLINUX x86, x86_64 轻量级引导加载程序,常用于USB或光盘启动,适合简单的引导任务和安装介质引导。 meta/recipes-bsp/syslinux http://www.syslinux.org
Barebox ARM, MIPS, PowerPC 嵌入式系统的轻量化Bootloader,设计简洁,类似于U-Boot,适用于资源受限的设备。 meta/recipes-bsp/barebox https://barebox.org
RedBoot ARM, MIPS, x86 早期嵌入式系统使用的Bootloader,支持网络引导和内存启动,现已逐渐被其他引导程序取代。 暂不支持 https://ecos.sourceware.org/redboot/
rEFInd x86_64, ARM (UEFI) 多操作系统引导管理器,支持UEFI系统,能够引导Linux、macOS和Windows操作系统。 暂不支持 https://www.rodsbooks.com/refind
LILO (Linux Loader) x86, x86_64 早期Linux系统的引导加载程序,支持从MBR引导,现已逐渐被功能更丰富的GRUB所取代。 暂不支持 停止维护
ELILO (EFI LILO) x86, x86_64 (UEFI) 适用于EFI/UEFI系统的引导程序,用于启动Linux内核,已逐渐被GRUB2所取代。 暂不支持 https://sourceforge.net/projects/elilo/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值