BIOS和Bootloader
版本追踪
2024.10.21:初版
目录
1 基础知识
1.1 计算机存储空间
RAM 、ROM 与 Flash(具体参考[[寄存器,RAM与ROM]])
RAM:随机存储器,用于存储系统运行过程中的数据,掉电不保存
ROM:只读存储器,只读不可写,可长期存储,掉电保存
Flash:从广义上来说,Flash 属于 ROM 概念中的一种,但更多时候 Flash 和 ROM 是并列关系,都是非易失性存储器
1.2 计算机启动流程
BIOS/UEFI –> Bootloader –> 操作系统内核 –> 应用
BIOS 和 Bootloader 无本质差别,都是初始化硬件和加载系统,理论上可以融合到一起(BIOS 着重初始化硬件,Bootloader 着重加载系统)。比如嵌入式系统中所有工作都合并到 Bootloader 中,而不存在单独的 BIOS 概念。大部分 PC 现在已经是 UEFI 模式,部分 PC 服务器还保留 BIOS+Bootloader 的模式
1.2.1 为什么需要引导
为什么需要引导而不是直接启动操作系统
- 初始化和自检:操作系统存储于外设存储介质中,CPU 需要通过外设才能访问到。所以在计算机启动时,需要先对硬件进行初始化和自检。该工作需要单独由引导程序来完成
- 引导设备选择:当有多个操作系统同时存在,或操作系统存在于不同的物理空间时,需要由单独的引导程序来进行引导,引导系统进入正确的操作系统
- 兼容性:现实不可能为每台不同的计算机硬件配置不同的操作系统。往往一套操作系统需要在多台不同的计算机上运行。引导程序提供了向后兼容性,向下由硬件厂商提供,向上提供统一的接口,供操作系统使用
1.2.2 为什么嵌入式上没有单独的 BIOS
ARM 体系多为硬件定制化开发。在系统开机时,大多已经预先知道有哪些外设,有哪些资源,且硬件很少再次变动,此时照方抓药即可,所以这些工作可以做到 BSP 或是 Bootloader 中,此时一套硬件和一套程序一一对应;而 x86 体系较为开放,计算机在开机时时常无法确定当前所用硬件,比如更换 CPU、内存条等行为会使硬件发生变动,此时需要 BIOS 重新适配新的硬件并向上层提供统一接口
2 启动流程
2.1 BIOS / UEFI
按下了电源键后,CPU 开始工作,一段写在 ROM 中的程序就开始运行; 引导机器去指定位置找系统运行;同时做一些硬件的初始化和自检等,只有硬件都 ok,才会把硬件交给操作系统。这个就是 BIOS (Basic Input Output System)
BIOS 和 UEFI 都是计算机的固件接口,UEFI 是 BIOS 的继任者
二者差异
BIOS: 16 位实模式,使用 MBR(主引导记录)分区格式,最大支持 2 TB 的硬盘
UEFI:32/64 位模式,使用 GPT(GUID 分区表)分区格式,支持更大的硬盘(最大可达 9.4 ZB)和更多的分区
以下都以 BIOS 作为统称
2.1.1 存储位置
BIOS 一般存储于一个独立的 ROM 中。在通用计算机系统中,该 ROM 常位于主板上
- 此主板 ROM 直连 CPU,不需要初始化即可访问
- BIOS 的地址固定,被写死到 CPU 的程序计数器 (PC)中,CPU 上电即执行该地址程序
为什么 BIOS 不直接集成到 CPU 上:CPU 上只存在寄存器和 L 1、L 2 级的缓存,而没有 ROM,因此将 BIOS 放在独立的主板 ROM 上
2.2 Bootloader
Bootloader 是在 BIOS 之后运行的,负责初始化硬件设备,并将系统的软硬件环境调整至合适状态,然后加载操作系统。现今 PC 大多将 Bootloader 融合到 UEFI 中
2.2.1 存储位置
- 嵌入式设备中,Bootloader 存储于 Flash 中;
- 在通用计算机系统中,Bootloader 存储于硬盘的引导扇区中;
- 在现代通用计算机中,Bootloader 可以直接合并到 UEFI 中;
2.2.2 GRUB
以传统通用计算机为例,GRUB 存储于系统硬盘的第一个分区,即 MBR(主引导记录)中。具体参考[[计算机硬盘(机械硬盘)]]
- 在 BIOS 完成自检后,BIOS 根据设置的启动顺序查找可引导设备(硬盘、CD/DVD、USB 等)
- 如果找到引导设备(如系统硬盘),BIOS 读取主引导记录(MBR)并将其加载到内存中,将机器的控制权交给 MBR 中的引导程序(即 GRUB)。
- GRUB 将硬盘中的操作系统加载到内存并将机器控制权移交给操作系统
3 嵌入式 Bootloader
嵌入式系统(以裸机和 RTOS 为例)中的 Bootloader 就相对简单,主要功能为初始化硬件设备、建立内存空间映射图。详细可看[[单片机Bootloader原理]]
3.1 工作流程
汇编阶段:
基本的硬件设备初始化(屏蔽所有的中断、关闭处理器内部指令/数据 Cache 等),为第二阶段准备 RAM 空间
设置堆栈。完成后跳转到第二阶段的 C 程序入口点
C 语言阶段:
初始化本阶段要使用到的硬件设备。检测系统内存映射。视情况将内核加载到 RAM 中。为内核设置启动参数。
跳转至内核
3.2 工作模式
- 启动模式:Bootloader 将操作系统加载到 RAM 并启动,为正常工作模式
- 下载模式:Bootloader 通过通信手段接收更新数据,将更新的操作系统存储到 Flash 中替换原操作系统。重启后通过启动模式 Bootloader 进入新系统完成更新
#计算机系统
#Bootloader
#BIOS
#嵌入式




