Bootloader详解

【Bootloader详解】Bootloader是什么?Bootloader有什么作用? Bootloader,中文叫引导加载程序,是一段存储在计算机固定位置(如硬盘的第一个扇区:主引导记录MBR,或EFI系统分区ESP)的小型程序。找到操作系统内核(如 Windows 的或 Linux 的vmlinuz),将其加载到内存中,然后把计算机的控制权交给它。BIOS/UEFI → Bootloader → 操作系统内核 → 操作系统界面这就像一个接力赛第一棒:BIOS/UEFI(硬件检查员),跑最短的距离。第二棒: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/

嵌入式操作系统——Bootloader概述 Bootloader是硬件启动的引导程序,是启动操作系统的根本;是在操作系统内核或用户程序运行之前的一段小程序;通过这段程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用准备好环境;在一般典型的系统中, 整个系统的加载启动任务就完全由Bootloader来完成。U-boot (Universal Boot Loader) 是德国DENX小组开发的用于多种嵌入式CPU的Bootloader程序。遵循GPL条款。 阅读详情

相关推荐

Bootloader详解,理解Bootloader看这篇就够了

这里写目录标题一、Bootloader作用(目的)二、完成Boot最终目的的前提条件三、对前提条件的详细说明3.1、对前提条件(1)的说明:3.2、对前提条件(2)的说明:3.3、对前提条件(3)的说明:3.4、对前提条件(4)的说明:3.4、对前提条件(5)的说明:四、loader是干啥的 一、Bootloader作用(目的) Bootloader=Boot + loader Boot的目的: 最终目的:跳到C语言中;为了C语言运行程序会进行一系列的初始化,系统一上电后如何通过一系列的设置让软件程序员

iduuigdg的博客 11万+

BootLoader介绍

1.BootLoader的引入 2.BootLoader的启动方式 3.BootLoader的结构和启动过程 4.自己写一个BootLoader

qq_51118175的博客 2万+

嵌入式系统中的引导加载程序(Bootloader)简介

Bootloader的主要功能是在系统上电后,将控制权从硬件引导到操作系统或其他可执行程序,确保系统能够正常启动和运行。函数中,Bootloader首先进行初始化操作,然后加载新的固件数据到内存中。否则,直接跳转到应用程序的入口地址。总结而言,Bootloader在嵌入式系统中起着至关重要的作用,它是系统启动的关键组件。通过加载固件和控制权的转移,Bootloader确保系统能够正常启动并执行所需的应用程序。这只是一个简单的示例,实际的Bootloader可能会更加复杂,涉及到更多的功能和安全性考虑。

CyberSphinx的博客 707

BootLoader这个玩意

有了前面的概念和源码描述,这里进行最后的总结。1)初始化看门狗。2)初始化时钟。3)初始化串口。4)设置CPU模式的栈指针,进入SVC模式。5)初始化RAM。6)初始化MMC控制器,并将内核映像从MMC设备中读到0x48000000处的RAM地址中。7)清除BSS段。8)做好调用内核前的准备工作。9)跳转到RAM中的内核的第一条指令,引导过程完成。(SVC和SYS的区别知道吗?我们在UBoot的内容学习过)

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 5546

Comsol&Matlab 亥姆霍兹共振消声器传递损失理论解与仿真解

当外界噪声以共振频率进入共振器时,共振器内的空气质量发生周期性的振动,从而减少或消除噪声。当特定频率的声波进入共振器时,共振器的空气质量会发生周期性的振动,从而实现对该频率的噪声的减弱或消除。5. 反射和吸收:共振器的几何形状和容积还可以影响共振器内空气振动的反射和吸收。然而,对于不同频率的噪声,需要相应调整共振器的参数以匹配新的共振频率。3. 腔体内的空气振动:当特定频率的声波进入共振器时,共振器内的空气质量会发生振动。2. 声波进入共振器:外界的声波通过共振器的颈部进入共振器的封闭空腔。

声学黑洞仿真工作室 4578

实测对比:DJI O3、Walksnail Avatar、HDZero三大高清图传,谁才是低延迟王者?

本文对DJI O3、Walksnail Avatar V2和HDZero三大高清图传系统进行了实测对比,重点分析其在FPV飞行中的低延迟表现。通过专业测试环境和量化数据,揭示HDZero在原生低延迟架构上的优势,DJI O3在画质与延迟间的平衡,以及Walksnail的动态码率调整特点,为不同场景下的选购提供决策依据。

weixin_30756499的博客 446

BootLoader是什么

BootLoader是什么 Bootloader从字面上来看就是启动加载的意思。用过电脑的都知道,windows开机时会首先加载bios,然后是系统内核,最后启动完毕。那么bootloader就相当于手机的bios,它在手机启动的时候根据基带初始化硬件,然后引导系统内核,直到系统启动。 Bootloader是嵌入式系统在加电后执行的第一段代码,通过这段小程序,进行硬件初始化,获取内存大小信息等,调整手机到适配状态。在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳

业余玩家 1万+

别让你的URDF模型在Gazebo里‘躺平’:手把手教你配置libgazebo_ros_diff_drive插件让两轮小车动起来

本文详细解析了如何在Gazebo中配置libgazebo_ros_diff_drive插件,使两轮小车模型实现动态仿真。从URDF模型到传动装置,再到差速驱动插件的精细调参,手把手教你解决机器人‘躺平’问题,提升ROS1与Gazebo仿真的实战能力。

weixin_42552716的博客 334

ArmLinux BootLoader详解

引言网上关于Linux的BOOTLOADER文章不少了,但是大都是vivi,blob等比较庞大的程序,读起来不太方便,编译出的文件也比较大,而且更多的是面向开发用的引导代码,做成产品时还要裁减,这一定程度影响了开发速度,对初学者学习开销也比较大,在此分析一种简单的BOOTLOADER,是在三星公司提供的2410 BOOTLOADER上稍微修改后的结果,编译出来的文件大小不超过4k,希望对大家有所帮

左飞的技事本 1520

Android 15网络子系统深度解析(一):ConnectivityService与网络管理框架全解析

深入剖析Android 15核心网络服务ConnectivityService的架构设计、NetworkAgent/Factory机制、网络状态管理、以及WiFi/移动网络切换的完整流程

Cheson的专栏 1749

Oracle迁移至华为GaussDB SQL语法和存储过程转换

在将Oracle数据库迁移至GaussDB时,SQL语法和存储过程的转换是确保应用程序正常运行和数据完整性的关键环节。由于两者在数据类型、函数、过程语言等方面存在差异,必须系统化地进行转换和测试。正则表达式脚本:批量替换常见的语法差异。SQL解析工具:解析SQL脚本,生成GaussDB兼容的语法。代码审查工具:自动检查转换后的代码,确保语法和逻辑正确。将Oracle迁移至GaussDB涉及到SQL语法和存储过程的全面转换。通过系统化的转换步骤、使用合适的工具并结合手动调整,可以确保迁移过程的顺利进行。

weixin_38428874的博客 2398

DSP Bootloader设计(之)初识Bootloader

Bootloader设计(之)初始Bootloader Bootloader定义 DSP上电引导过程 Bootloader即引导程序,一般指DSP上电复位后负责程序跳转至应用程序之前的出厂程序;也范指将程序数据由指定接口(如CAN)装载到固定区域的过程,包括一次Bootloader和二次Bootloader。 一次Bootloader DSP上电复位后,会触发RESET中断,中...

iFTrue电力电子专栏 1万+

计算机考研复试面试常问问题 数据结构篇(下)

计算机考研复试面试常问问题 数据结构篇(下) 使用前需知(拒绝白嫖,如果对你有帮助,你只需点个赞就行): 注意:有人在闲鱼上盗卖我的资料,而且还有很多同学买了,请各位擦亮双眼,我是整理出来免费分享给大家的! 大家请多点赞和评论,这样后面的同学更容易百度到,不至于被人盗卖,我就不加水印影响大家使用了! 第一次整理,度不好控制,有不好的地方希望大家理解,后面可能会改进,造福今年之后的同学们! ...

程序员宝藏的博客 1万+

ArmLinux BOOTLOADER全程详解

网上关于Linux的BOOTLOADER文章不少了,但是大都是vivi,blob等比较庞大的程序,读起来不太方便,编译出的文件也比较大,而且更多的是面向开发用的引导代码,做成产品时还要裁减,这一定程度影响了开发速度,对初学者学习开销也比较大,在此分析一种简单的BOOTLOADER,是在三星公司提供的2410 BOOTLOADER上稍微修改后的结果,编译出来的文件大小不超过4k,希望对大家有所帮助.

DerekYao的专栏 1284

对称式目镜设计实例

对称式目镜设计实例

weixin_72050316的博客 1163

PyTorch深度学习实战(25)——从零开始实现Mask R-CNN实例分割

Mask R-CNN 是一种在目标检测任务中引入了语义分割的强大框架,通过在 Faster R-CNN 基础上进行扩展,添加了额外的分支网络,不仅可以准确地检测对象的位置和类别,还可以生成每个实例的精确像素级别的语义分割掩码。其模块化的设计可以轻松地应用于不同的任务和数据集,并且可以通过添加更多的分支进行功能扩展,如实例关键点检测等。

盼小辉丶的博客 1万+

linux bootloader原理,Bootloader原理详解

文章一:1.BootLoader 的介绍引导加载程序BootLoader 是系统加电后运行的第一段代码。我们熟悉的PC 中的引导程序一般由BIOS和位于硬盘MBR中的OS bootloader(例如LILO 或者GRUB)一起组成。然而在嵌入式系统中通常没有像BIOS那样的固件程序(有的嵌入式CPU 有),因此整个系统的加载启动任务就完全由bootloader 来完成。比如在一个基于ARM920T...

weixin_42613583的博客 1980

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【摘】ArmLinux BOOTLOADER全程详解

导读:   ArmLinux BOOTLOADER全程详解   网上关于Linux的BOOTLOADER文章不少了,但是大都是vivi,blob等比较庞大的程序,读起来不太方便,编译出的文件也比较大,而且更多的是面向开发用的引导代码,做成产品时还要裁减,这一定程度影响了开发速度,对初学者学习开销也比较大,在此分析一种简单的BOOTLOADER,是在三星公司提供的2410 BOOTLOADE

yingfox的专栏 773

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

如何实现BOOTLOADER

1.之所以要实现一个 嵌入式操作系统 专用的BOOTLOADER,一是为了更好的移植和自身的升级,二是为了方便 嵌入式 操作系统 的调试,当然,你完全可以将这部分所要实现的与操作系统相关的功能集成到操作系统中去 2.确定一个简单的BOOTLOADER所要完成的功能:我们这里只需要完成两个主要功能,一是将操作系统加载到内存中去运行,二是将自己和操作系统内核固化到ROM存储区(这里的ROM可以是很

naiveC的专栏 1201

Arm Linux BOOTLOADER全程详解

1.几个重要的概念 COMPRESSED KERNEL and DECOMPRESSED KERNEL Jffs2 File System RAMDISK 启动参数(摘自IBM developer) 2.开发环境和开发板配置: 3.启动方式: 4.代码分析 网上关于Linux的BOOTLOADER文章不少了,但是大都是vivi,blob等比较庞大的程序,读起来不太方便,编译出的文件也比较大,而且更

成长的天空 872

Bootloader学习总结

本文为汽车电子ECU刷新相关的Bootloader介绍,为日常学习中的归纳总结,从使用者角度,对Bootloader进行介绍,对多级Boot,SB及CB概念及功能进行系统介绍

initiallizer的博客 3616

bootloader详解

4.2               Bootloader的总体设计 4.2.1        阶段设计 在前面的章节中,已经介绍过bootloader的启动可以是分阶段的。在设计时,我们将bootloader分为两个阶段:阶段1和阶段2。分为两个阶段的原因是因为:(1)基于编程语言的考虑。阶段1用主要用汇编语言,它主要进行与CPU核以及存储设备密切相关的处理工作,进行一些必要的初始化工作,是一

空山新雨后 6923

BootLoader

在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的

Zju_Jemery的专栏 864
上一篇: Linux系统架构
下一篇: U-Boot工程
嵌入式孙老师
博客等级 码龄7年 5688粉丝 902原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值