计算机启动过程

自我理解的计算机启动过程,没有更多参考文档以及相关信息,如有误,我错了,啥时候改,看心情。

硬件

对于通常PC来讲,当你第一次开机时(相对于固件程序),硬件会完成一遍通体自检
检查CPU,内存,硬盘,显卡(有顺序,但不知道)等硬件
等待自检完成后进行下一步启动

一个基础知识:无论是UEFI,还是BIOS,都是一种固件程序
单UEFI的实现甚至可以没有BIOS控制

BIOS

当BIOS启动时,BIOS首先会检查一遍(或三遍)硬件(主板本身,CPU,内存,显卡),然后初始化硬件信息和各类设备(存储,其他外设等)
然后寻找各个储存设备的MBR(主引导记录)部分,然后启动(后面更多算软件了,懒得讲)

UEFI

在大多数UEFI固件启动过程中,并不会做过多的硬件检测,而是给系统进行检测,并且有一套相对统一的接口

Fast Boot(快速启动)

UEFI的快速启动功能,一般不会在第一次启动时出现
硬件部分的快速启动一般是指,只初始化部分硬件,例如,只初始化你上次启动的硬盘,和上次有通讯的鼠标,键盘等接口,直接不初始化PS/2等接口
这里我印象里更多是延迟初始化硬件,它可以进入系统后,或者过程中初始化信息,这些我并不确定

NVRAM

NVRAM是指UEFI固件启动顺序的存储区(可能包括存储设置信息),这里存储的信息有:启动顺序,启动项名称,启动项指向的硬盘及启动的EFI文件
当系统安装进硬盘的最后时刻,一般会添加NVRAM信息,Linux系统使用efibootmgr进行管理,Windows使用bcdedit进行管理
当然,也可能包含其他我并不知道的信息,但主要信息就是这些

Boot (启动)

UEFI的启动,照常理来说,会优先检索NVRAM进行启动,如果NVRAM没有
则会检测所有存储设备的GPT分区格式,寻找EFI分区
默认启动里面的/EFI/Boot/bootx64.efi 如果没有该文件,应该默认找该目录的bootia32.efi
无论是bootx64还是bootia32,都只应该是一个指路牌
部分固件程序会设计不寻找bootia32,也有部分会直接检索EFI/目录下的所有efi文件进行NVRAM的添加,但这应该并不是标准操作

Secure Boot(安全启动)

在安全启动启用的情况,启动EFI的过程中,会校验EFI存在的签名信息,它是否已经内置在了固件中,如没有内置,就直接禁止启动
在大多数Android设备上,Bootloader锁,就是一种安全启动的行为,但是里面只包含了设备制造商的签名信息
另外,签名信息是可以自签名并且导入进固件中的。
当然,这种情况也适用于Android,但是方法可能不一样,但理论是相同的

comments powered by Disqus