liwen01 2024.04.14
我们身边的各种电子设备,手机、手表、相机、个人电脑等等,从用户体验的角度看,好像只要给它们一上电,它们就开始启动可以工作了,这个过程一般是比较短暂的。
从一个嵌入式开发的角度来看,不管是嵌入式系统,还是其它的计算机系统,其启动过程都是一个相对复杂的过程。这个过程一旦出错,基本上设备就不能正常运行了。
我们先看一个嵌入式系统的存储架构示意图
嵌入式设备的存储介质一般有
NOR Flash
,
NAND Flash
、
SD卡
、
EEPROM
等,其中根据Flash接口的不同,又可以分期
串行Flash(SPI Flash)
和
并行Flash
。在芯片内部有它们对应的控制器。
于此同时,一般在芯片的内部,都会有一个比较小的SRAM和ROM,我们一般称它为内部SRAM和内部ROM。
我们的程序,包括系统程序和应用程序,一般都是存放在这些外接的存储介质上。
这里需要对几个知识点需要注意:
其实不管是嵌入式系统,还是其它的计算机系统,其启动过程大概都可以分为三个阶段
ROM阶段
:指的是处理器内部的ROM程序阶段,主要作用是加载存储头部的一小段程序到内部RAM上,这部分的程序一般是使用汇编来实现。
RAM阶段
:是指外部DDR已经被初始化,并且存储器中的程序已经被重定位到外部DDR上,从这开始,程序的堆栈空间可以被建立起来,C语言可以开始执行。
BOOT阶段
:是指开始其它外围硬件初始化和引导系统启动。
计算机系统因为历史悠久,外设种类众多,它的启动流程会复杂一些,根据
固件类型
(BIOS或UEFI)和
分区表类型
(MBR或GPT)的不同,计算机的启动一般可以分为
BIOS启动
和
UEFI启动
两种。
查资料看文档发现BIOS、UEFI、LEGACY这几个概念有些混乱,没有统一的定义。对大部分来说,它们理解的引导计算机启动的程序就叫BIOS
因此在这之前,我们统一一下说法,计算通过BIOS引导系统启动,根据BIOS固件的不同和磁盘的分区类型不同,又可以分为两种方式:
LEGACY(传统BIOS)
和
UEFI启动
。
要了解计算机的启动流程,我们先看下一台个人计算机的主板上都有些什么接口和组件
主要的组件有:
电源
、
CPU
、
南桥北桥芯片组
、
BIOS芯片
、
磁盘接口
、还有各种扩展接口和连接器(内存、显卡、网卡声卡等等)
与启动比较相关的是
电源
、
CPU
、
南北桥芯片组
,
BIOS芯片
、
磁盘
、
内存
(1)ATX电源
ATX是一种主板的规范、符合ATX规范的电源就叫ATX电源,它的作用是是把交流220V的电源转换为计算机内部使用的5V、12V、24V等不同压值的直流电源。
另外,它还支持电源管理, ATX电源标准接口(如PS_ON、PWR_OK等)与主板通信,以实现电源的管理和控制,包括开机、关机、睡眠模式和节能功能等。
(2)嵌入式控制器(EC)
EC(Embedded Controller)是笔记本电脑上的一个16位小芯片,在不同的设备上,它的名字有些不一样,功能也有些差异:
EC的主要功能有:
(3)BIOS芯片
我们常说的BIOS(Basic Input/Output System,基本输入/输出系统),它其实是位于主板上的一块芯片,里面存储着BIOS程序。
它主要负责启动、初始化计算机硬件,引导操作系统启动。
最开始BIOS程序是存储在ROM中,后面存储在EEPROM,现在大多数都存储在Nor Flash中,因为是存储在Nor Flash 中,所以现在的BIOS 程序是可以被升级更新的。
(4)南桥与北桥
南桥和北桥是指计算机主板上的两个重要芯片组,它们协同工作以连接和管理主板上的各种硬件组件。
北桥(Northbridge):
南桥(Southbridge):
随着技术的发展和新型架构的出现,北桥和南桥的功能划分逐渐变得模糊。现代的芯片组设计趋向于集成更多的功能到单个芯片中,以提高效率并减少组件数量
(5)磁盘
磁盘在前面已经有过介绍
文件系统(一):存储介质、原理与架构
文件系统(二):分区、格式化数据结构
(6)扩展介绍
不同的主板规格,主板上的接口和器件会有差异。
对于台式计算机而言,关机和设备断电,它是处于不同的工作状态的,关机状态下,BIOS和主板上的一些其它器件还是在工作的,比如跟开机按键检测相关的一些器件。
台式机在断电的时候,它里面的时钟也是有在运行,它是通过主板上的纽扣电池来进行供电。纽扣电池最开始是为CMOS供电的,这里的CMOS其实就是一个小的RAM,保存的是用户设置的一些BIOS参数,以及主板器件的一些参数。
LEGACY 方式它只能加载MBR分区格式的引导盘,它的启动方式,大概可以分为6个阶段:
(a)CPU上电
(b)BIOS硬件检测
(c)BIOS更新参数
(d)BIOS交出控制权
(e)执行MBR引导程序
(f)活动分区加载操作系统
Windows系统中大概的一个启动流程是:
在UEFI启动模式中,大部分的工作是在ESP分区中进行
ESP分区
ESP(EFI System Partition)是用于存储 EFI(Extensible Firmware Interface)引导加载程序和相关引导文件的分区。它是启动过程中的重要组成部分,包含操作系统引导加载程序、配置文件和其他与引导相关的文件。
与启动比较相关的是下面三个文件:
UEFI BIOS 程序执行阶段
一般分为7个过程:
步骤 | 阶段缩写 | 英文全称 | 中文名字 |
---|---|---|---|
1 | SEC | Security Phase | 安全验证阶段 |
2 | PEI | Pre-EFI Initialization | EFI前期初始化阶段 |
3 | DXE | Driver Execution Environment | 驱动执行环境阶段 |
4 | BDS | Boot Device Selection | 启动设备选择阶段 |
5 | TSL | Transitional System Load | 操作系统加载前期阶段 |
6 | RT | Runtime | 系统运行时阶段 |
7 | AL | System Recovery or Shutdown | 系统灾难恢复期或关机阶段 |
1.SEC(安全验证):
安全验证是UEFI启动过程的第一步。在这个阶段,执行UEFI固件的固定代码,主要负责初始化CPU、内存和一些基本的系统硬件。
2.PEI(EFI前期初始化):
在这个阶段,UEFI固件负责执行更多的硬件初始化,包括DRAM初始化,建立PEI系统服务,为后续的DXE阶段做准备。
3.DXE(驱动执行环境):
DXE阶段是加载和执行UEFI驱动程序的阶段。这些驱动程序可以是固件驱动程序、外部设备驱动程序等,以提供更多的硬件支持和功能。
4.BDS(启动设备选择):
在这个阶段,UEFI选择启动设备,例如硬盘、光盘、USB驱动器等。用户可以通过UEFI设置来配置启动顺序。
5.TSL(操作系统加载前期):
这个阶段涉及加载操作系统引导加载器,准备操作系统加载。UEFI启动管理器在这个阶段起到关键作用。
6.RT(系统运行时):
一旦操作系统加载完成,系统进入运行时阶段。UEFI仍然提供了一些运行时服务,使操作系统能够访问硬件资源。
7. AL(系统灾难恢复期或关机):
这是系统的最终阶段,涉及系统的灾难恢复、关机或重启。
嵌入式设备与个人计算机系统,在启动方面,个人认为最大的区别是个人计算机将嵌入式设备系统SOC中大部分的功能放到BIOS上去实现了。主要的原因是嵌入式设备的SOC的外设接口和器件相对比较固定,没有个人PC机的主板这么复杂,所以放在SOC的ROM上去实现会更加的高效。
我们可以从硬件平台、引导程序、启动时间上做简单介绍
1. 硬件平台:
2. 引导加载程序:
3. 启动时间:
整体来说:嵌入式系统更加注重定制化和高效性,而个人计算机则更注重通用性和功能性。
它们主要的区别在于启动方式、启动速度、容量限制、图形界面、安全性上
1.启动方式:
2. 启动速度:
3. 容量限制:
4. 图形界面:
5. 安全性:
总的来说,UEFI相比Legacy BIOS具有更快的启动速度、更大的容量支持、更丰富的功能和更好的安全性,因此在现代计算机系统中越来越受到广泛应用。
以前在嵌入式软件开发岗位面试的时候,经常被问到系统启动流程,或者是uboot启动流程介绍。对于系统工程师而言,这些应该是需要熟练掌握,但是对于应用工程师而言,我个人认为只要了解基本流程和概念就可以了。
以上内容,如有错误,欢迎批评指正