admin 管理员组

文章数量: 887021

EFI与BIOS

EFI的全称是Extensible Firmware Interface(可扩展固件接口)。它与传统的BIOS(基本输入/输出系统)的主要区别和联系如下:

区别:

  1. 体系结构和设计理念

    • BIOS基于较老的架构,其功能有限且不便于扩展。
    • EFI(及其后继者UEFI,统一可扩展固件接口)采用模块化设计,允许更灵活地添加新功能和更新固件,支持更多的现代操作系统特性。
  2. 启动过程

    • BIOS使用MBR(主引导记录)分区表,并依赖于特定的引导扇区来加载操作系统。
    • EFI则使用GPT(全局唯一标识分区表),并直接从EFI系统分区中的EFI应用程序(比如Windows的BOOTMGR)启动操作系统,这种方式更加安全和高效。
  3. 驱动程序和兼容性

    • BIOS对硬件初始化时通常需要加载固定的驱动程序集。
    • EFI在启动过程中可以加载预先存储的EFI驱动程序,支持即插即用设备,并且能与多种操作系统更好地交互。
  4. 用户界面和配置

    • BIOS通常提供简单的文本菜单界面,选项有限。
    • EFI提供了更为高级的图形化用户界面,配置选项更多样化和直观。
  5. 安全性

    • BIOS不包含内置的安全措施,例如安全启动(Secure Boot)。
    • EFI支持安全启动,可以防止未经授权的操作系统或恶意软件篡改启动过程。

联系:

  • 都属于计算机启动过程中的固件层级,负责在操作系统加载前初始化硬件、建立基本环境以及引导操作系统。
  • 两者都位于操作系统之上、硬件之下的层级,是连接硬件和操作系统的桥梁。

总的来说,EFI/UEFI是对传统BIOS的重大改进,旨在解决BIOS在面对现代复杂计算环境时所面临的局限性和挑战。随着技术的发展,越来越多的现代计算机和操作系统已经转向UEFI作为标准的固件接口。

=======

BIOS之POST

BIOS自检(POST,Power-On Self Test)是在计算机启动时进行的一系列硬件检测步骤。它主要检查以下几个方面:

  1. 基本硬件存在性与功能性

    • CPU(中央处理器):确认CPU是否存在并能够正常运行。
    • 内存(RAM):检测内存条的数量、大小以及是否能正确读写数据,通常会执行一些基础的内存测试。
    • 显卡(Video Card):确保显卡已就绪,能够提供基本的显示输出功能。
    • 基本输入输出设备:包括键盘、鼠标等,以确保系统可以接收用户输入。
  2. 关键系统组件

    • 系统时钟(Real-Time Clock,RTC):检查系统时钟芯片的工作状态和当前日期时间设置。
    • DMA控制器和中断控制器:验证直接内存访问和中断系统的正常运作。
    • BIOS自身的完整性:确保存储在ROM中的BIOS代码没有损坏或被篡改。
  3. 扩展硬件资源

    • 扩展内存:除了64KB的基本内存之外,还会检测扩展内存区域是否可用。
    • I/O端口:检测所有连接到主板上的I/O设备接口是否工作正常。
    • 存储设备:如硬盘驱动器、光驱、USB设备等,检查它们能否作为启动设备,并检测其基本健康状况。
    • 其他外设:根据系统配置,可能还包括对网络适配器、声卡、以及其他即插即用设备的检测。
  4. 初始化设置

    • 根据CMOS/CMOS RAM中的设置信息来配置硬件参数,例如系统启动顺序、硬件的IRQ分配、DMA通道设置等。

通过这一系列的检测,BIOS确保了计算机的基础硬件环境能够在操作系统加载前达到稳定且可操作的状态。如果在自检过程中发现任何严重错误,系统将停止启动并报告错误;对于非严重错误,则可能会给出警告,但允许系统尝试继续启动。

==============

EFI与UEFI

EFI(Extensible Firmware Interface,可扩展固件接口)和UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)是现代计算机启动过程中的固件标准,它们都是用来取代传统的PC BIOS的。

EFI

  • EFI是由英特尔公司率先推出的一种新型固件体系结构,旨在解决传统BIOS在功能、性能以及安全性等方面的局限性。
  • EFI基于32位或64位架构,提供了一种更为现代化的操作环境,允许使用高级编程语言编写系统引导加载程序和预操作系统应用。
  • EFI引入了模块化设计,并支持复杂的硬件初始化和操作系统的安全启动。

UEFI

  • UEFI是在EFI的基础上发展而来的,由一个称为“统一EFI论坛”(Unified EFI Forum)的国际组织管理维护。
  • UEFI不仅继承了EFI的所有优点,而且进行了多项改进和标准化工作,包括对更大硬盘的支持(超过2.2TB)、更丰富的图形用户界面、更强大的网络支持以及更好的兼容性和扩展性。
  • UEFI增加了许多新的特性,例如GUID分区表(GPT)以替代MBR分区模式,能够处理更大的硬盘容量并提高数据完整性;同时支持安全启动功能,确保只有经过认证的操作系统可以被加载,从而增强了系统的安全性。
  • UEFI还支持更快的启动时间和更灵活的预操作系统环境,比如支持多种设备驱动和预启动应用程序。

总的来说,UEFI是一种更加先进且功能丰富的固件接口规范,它通过定义操作系统与平台固件之间的标准接口来简化和优化启动过程,使得计算机系统具备更高的启动速度、更好的兼容性和安全性。

=========

UEFI与BIOS

UEFI(Unified Extensible Firmware Interface)与传统的BIOS(Basic Input/Output System)在功能、原理和开机启动过程上存在显著的区别:

功能上的区别:

  1. 扩展性:UEFI是一个可扩展的架构,允许固件开发者增加新的接口和服务,而BIOS的功能相对固定且不易扩展。

  2. 安全性:UEFI支持安全启动(Secure Boot),它通过验证操作系统加载程序的数字签名来防止恶意软件篡改启动过程。BIOS不具备这样的内置安全机制。

  3. 驱动程序支持:UEFI可以加载并执行EFI驱动程序,这些驱动程序能够在操作系统加载之前运行,提供对现代硬件的支持。相比之下,BIOS中的驱动是固定的,并且通常不支持复杂的硬件初始化。

  4. 启动方式:UEFI支持从GPT分区引导操作系统,并可以直接读取文件系统加载引导程序;BIOS则依赖MBR分区表,并需要一个特定扇区内的引导加载程序。

  5. 用户界面:UEFI提供了图形化用户界面,操作更为直观和易用;BIOS大多使用文本界面,菜单结构简单,设置选项较少。

原理上的区别:

  • 体系结构:UEFI基于32位或64位模式运行,能够访问更大内存空间,执行效率更高;BIOS主要基于16位实模式运行。
  • 启动流程:UEFI采用模块化设计,启动过程中可以通过加载不同UEFI应用程序进行自定义引导;BIOS遵循一套固定的POST(Power On Self Test)和引导加载流程。

开机启动过程上的区别:

  • 启动速度:UEFI由于减少了自检步骤、直接加载UEFI应用等特性,通常比BIOS启动更快。
  • 启动加载器:BIOS下,系统查找主引导记录(MBR)中的引导加载程序;而在UEFI环境下,固件从预设的ESP(EFI System Partition)中找到指定目录下的UEFI引导应用程序(.efi文件)执行。

总的来说,UEFI相较于BIOS具有更现代化的设计、更强的安全性、更好的兼容性和更高的性能。随着技术发展,UEFI已经成为当前计算机系统主流的固件标准。

==========

ESP和MSR

在分区时会提示创建ESP(EFI系统分区)和MSR(Microsoft保留分区)是因为这些分区对于使用GPT分区表的磁盘来说是非常重要的。具体分析如下:

  1. ESP (EFI System Partition)
  • ESP是一个专门用于存储引导加载程序和其他系统实用程序的小型分区。
  • 它对于UEFI固件启动的系统是必需的,因为UEFI启动时需要从ESP读取引导程序
  • 通常情况下,ESP分区的大小不需要很大,但建议至少分配100MB到200MB的空间。
  1. MSR (Microsoft Reserved Partition)
  • MSR是Windows操作系统保留的分区,用于特定目的,如系统恢复或预启动系统完整性检查。
  • 它不是用来存储用户数据的,而是为了确保系统的稳定性和安全性。
  • 在某些情况下,如果不创建MSR分区,可能会导致系统不稳定或者无法正常安装操作系统。

此外,如果硬盘作为非系统盘使用,即不作为启动盘,那么可以不创建MSR和ESP分区。但在大多数情况下,尤其是当硬盘用作系统启动盘时,创建这两个分区是必须的。

总的来说,创建ESP和MSR分区是在硬盘初始化和分区过程中的一个重要步骤,它们对于确保操作系统能够正确安装和启动至关重要。

=======

EFI/Boot和EFI/Microsoft

在EFI系统分区(ESP,EFI System Partition)中,通常包含以下目录结构和作用:

  1. EFI 目录:

    • 这是ESP分区中的核心目录,其中包含了各个操作系统及其引导加载程序的子目录。
      • EFI/Boot:这个目录下通常会有一个基本的启动文件(如BOOTX64.EFI或BOOTIA32.EFI),用于没有明确指向操作系统的UEFI固件进行默认启动时使用。
      • EFI/<OS_VENDOR>:每个支持UEFI引导的操作系统厂商都会在这里创建一个子目录,例如EFI/Microsoft/存放Windows的引导文件,EFI/Linux或者EFI/ubuntu等存放Linux发行版的引导加载器文件。
  2. Microsoft 目录(对于Windows系统):

    • 该目录下存储了Windows操作系统的相关引导文件,包括Boot Manager (bootmgfw.efi) 和 Boot Loader (bcdboot.exe 创建的 BCD 文件) 等。
  3. 其他操作系统特定目录

    • 对于非Windows操作系统,比如Linux发行版,会有各自对应的目录,里面放置GRUB、rEFInd或其他UEFI引导加载器所需的文件。
  4. 第三方引导管理器

    • 如 rEFInd 或 Clover 等第三方引导管理器也会在 ESP 中有自己的目录,并且存放它们的引导文件和其他资源。
  5. 驱动程序

    • 在某些情况下,ESP 分区可能还会包含用于初始化硬件设备的UEFI驱动程序。
  6. 工具和恢复数据

    • 一些制造商可能会在此处放置恢复工具、诊断软件或者特殊的系统维护工具。

这些目录及其中的文件共同构成了UEFI环境下的启动链,允许计算机从多个操作系统或其他特殊用途的软件中选择启动。

=======

UEFI与BIOS的启动过程

UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)与传统的BIOS(Basic Input/Output System,基本输入输出系统)在启动过程中的主要区别如下:

  1. 体系结构和模式

    • BIOS基于16位实模式架构,而UEFI则使用32位或64位的保护模式,提供更大的地址空间和更高效的处理器利用。
  2. 引导方式

    • BIOS通过Master Boot Record (MBR) 进行引导,MBR包含引导加载程序代码,并且有分区表限制(如只能支持最大2TB的硬盘容量,以及最多四个主分区或三个主分区加一个扩展分区)。
    • UEFI使用GUID Partition Table (GPT),可以支持更大容量的硬盘,并且每个分区都有唯一的全局唯一标识符(GUID),允许更多数量和类型的分区。
  3. 启动加载器

    • BIOS下,系统寻找并执行存储在主引导扇区的引导加载程序,然后由该加载程序继续加载操作系统内核。
    • UEFI下,固件直接从ESP(EFI System Partition)中查找指定目录下的UEFI应用程序(通常是.efi文件格式的引导加载器),这些加载器可以直接加载现代操作系统的PE(Portable Executable)格式内核。
  4. 安全性

    • BIOS对安全性的支持有限,没有内置的安全启动机制。
    • UEFI提供了Secure Boot功能,能够验证启动加载器的数字签名,确保只加载经过认证的操作系统和驱动程序,增强了系统抵御恶意软件的能力。
  5. 用户体验

    • BIOS界面通常为文本界面,配置选项较少且不直观。
    • UEFI支持图形用户界面,提供了更为丰富的设置选项和更好的交互体验。
  6. 性能

    • BIOS启动过程中需要先进入16位实模式,再切换到32位或64位保护模式,这一过程相对复杂且耗时较长。
    • UEFI启动时直接以32位或64位模式运行,减少了模式切换带来的开销,从而加快了启动速度。
  7. 可扩展性

    • BIOS的功能相对固定,难以升级和扩展。
    • UEFI是一个开放标准,允许硬件厂商和操作系统开发者自定义和扩展功能,例如支持网络引导、预启动执行环境等高级特性。

================

安全启动(Secure Boot)

安全启动(Secure Boot)是UEFI规范中的一项安全特性,旨在防止恶意软件在操作系统启动之前加载。该功能要求系统在启动过程中仅加载那些使用合法密钥签名过的固件、驱动程序和操作系统组件。

认证过程基于数字签名机制:

  1. 操作系统开发商(如微软)会在发布操作系统安装镜像时,使用受信任的证书对其引导加载程序进行数字签名。
  2. 计算机制造商或最终用户在启用安全启动功能时,会在UEFI固件设置中配置一个信任数据库,这个数据库包含了认可的公钥证书。
  3. 当计算机启动时,UEFI固件会检查即将加载的操作系统的引导加载程序是否带有有效的签名,并且这个签名是否来自于信任数据库中的证书颁发者。
  4. 如果签名验证通过,则允许操作系统继续加载;否则,如果操作系统未经过认证签名或者签名不匹配,则拒绝启动。

对于盗版GHOST系统或其他非官方修改的操作系统版本,由于它们通常没有得到原操作系统开发商的官方签名,因此无法通过安全启动的认证流程。除非用户禁用了安全启动功能,或者手动添加了信任这些非法或非官方签名的密钥到UEFI的信任数据库中,否则这样的系统是不能在安全启动开启的情况下成功安装和运行的。不过,这种做法将严重削弱安全启动的安全防护效果。

数字签名--Bootmgfw.efi和Winload.efi

在UEFI环境中,当提及“操作系统的引导加载程序”时,通常是指具有有效数字签名的UEFI应用程序文件。对于Windows操作系统来说,这个具体文件可能是:

  • Bootmgfw.efi:这是Windows Boot Manager (BOOTMGR) 的UEFI版本,负责管理多个启动项和继续加载实际的操作系统内核。

  • Winload.efi:这是Windows操作系统的实际引导加载器,在Boot Manager之后被加载,用于加载操作系统的核心组件。

这两个文件(或其他类似的.efi文件)必须带有由受信任的证书颁发机构(CA)签名的证书,并且该证书需要存在于UEFI固件的安全启动数据库中,才能通过安全启动(Secure Boot)验证并顺利启动操作系统。如果使用的是Linux或其他非Windows操作系统,则对应的UEFI引导加载程序可能为GRUB2的grubx64.efi或特定发行版提供的.efi引导加载程序。这些同样需要经过适当的签名以便在启用安全启动的UEFI系统上正确启动。

其他操作系统的引导加载程序grubx64.efi/boot.efi/loader.efi

不同的操作系统使用不同的EFI引导加载程序(.efi文件)。以下是一些常见操作系统的UEFI引导加载程序:

  1. Linux发行版

    • 在大多数Linux发行版中,用于UEFI启动的引导加载程序通常是shim.efi或者grubx64.efishim.efi是一个轻量级的引导加载程序,主要用于支持安全启动(Secure Boot)功能,并随后加载grubx64.efi(GRUB2),GRUB2是更为复杂的引导加载器,它可以加载Linux内核和初始化RAM磁盘(initrd),进而启动操作系统。
  2. macOS(苹果系统)

    • 苹果的macOS使用名为boot.efi的引导加载程序,它位于ESP分区下的EFI/Apple/目录下。
  3. FreeBSD、OpenBSD等类UNIX系统

    • 这些系统通常也使用自己的UEFI引导加载程序,比如在FreeBSD中可能是loader.efi
  4. 其他嵌入式或定制操作系统

    • 根据具体的操作系统实现,可能会有对应的UEFI引导加载程序,名称不一定遵循上述模式,但同样会遵循.efi的扩展名格式。

每个操作系统的引导加载程序都是针对该系统的特点和要求设计的,其主要任务是与UEFI固件交互,为操作系统内核提供适当的参数并最终加载内核开始启动过程。

winload.efi在windows中的路径

winload.efi 文件通常位于Windows操作系统安装分区的特定目录下,对于使用UEFI引导的系统来说,其路径通常是:

1C:\Windows\System32\Boot\EFI\winload.efi

在用户通过 bootmgfw.efi(即Windows Boot Manager)选择了一个启动项后,Windows Boot Manager会根据存储在BCD(Boot Configuration Data)中的配置信息来加载相应的内核加载程序。具体流程如下:

bootmgfw.efi-->Windows Boot Manager-->BCD-->winload.efi

  1. 当计算机启动并进入UEFI固件阶段时,固件会查找预设的EFI系统分区上的EFI/Boot/bootx64.efiEFI/Microsoft/Boot/bootmgfw.efi文件
  2. 若找到bootmgfw.efi,它将被加载到内存中执行,即开始运行Windows Boot Manager。
  3. Windows Boot Manager读取BCD(Boot Configuration Data),这个数据存储了系统的启动选项和相关参数。
  4. 用户通过显示的启动菜单选择一个操作系统启动项后,Windows Boot Manager依据BCD中该启动项指定的路径去加载winload.efi
  5. winload.efi被加载到内存,并负责加载操作系统的内核以及其他必要的驱动程序和启动服务,最终使操作系统能够启动并运行。

因此,从bootmgfw.efiwinload.efi的过程是一个有序且基于配置数据的引导链路,确保了操作系统的正确加载与。

默认启动项--Bootmgfw.efi和Bootx64.efi

ESP分区中,同时存在EFI/Boot/bootx64.efi和EFI/Microsoft/Boot/bootmgfw.efi文件,那么当计算机启动时,他会如何选择?

在UEFI引导过程中,计算机启动时会选择加载哪个EFI应用(如bootx64.efibootmgfw.efi)主要取决于UEFI固件的配置和Boot Manager的设置。

通常情况下:

  1. 默认启动项:UEFI固件会检查其内部存储的启动顺序列表,并尝试从预设的默认启动项中加载文件。这个默认启动项可能指向EFI/Boot/bootx64.efi,也可能是EFI/Microsoft/Boot/bootmgfw.efi,具体由用户或制造商在BIOS/UEFI设置界面中设定。

  2. Windows Boot Manager (bootmgfw.efi):在大多数现代Windows系统中,UEFI固件的默认启动项通常是EFI/Microsoft/Boot/bootmgfw.efi,因为它是Windows操作系统自带的Boot Manager。Boot Manager可以显示一个启动菜单,让用户选择要启动的操作系统或者恢复环境等。

  3. 应急启动EFI/Boot/bootx64.efi 文件有时被用作备用引导程序或应急启动方案。如果EFI/Microsoft/Boot/bootmgfw.efi无法正常工作,或者用户手动更改了启动顺序和路径,UEFI固件可能会去尝试加载EFI/Boot/bootx64.efi

因此,当计算机启动时,它首先按照UEFI固件中的启动顺序查找并加载指定的EFI应用程序。对于多启动环境或自定义启动配置的情况,可能需要用户通过UEFI设置界面进行更详细的配置以控制启动流程。

在Microsoft的BOOT文件夹里:Bootmgfw.efi和Bootmgr.efi

bootmgfw.efi 是 Windows Boot Manager 的全称,其中 mgfw 通常被解释为“Microsoft Boot Manager for UEFI Firmware”。这个文件是用于支持UEFI启动模式下的Windows操作系统加载过程的引导管理器。

bootmgfw.efi

  • 是在UEFI环境中使用的Windows引导程序。
  • 它负责加载和显示操作系统的启动菜单(如果有多个操作系统或恢复环境等)。
  • 当用户选择一个启动项后,它会继续引导进入相应的操作系统内核加载程序,通常是winload.efi

bootmgr.efi

  • bootmgr.efi 全称为 Boot Manager,在较早版本的Windows中,特别是在从BIOS引导的传统启动模式下使用。
  • 在Windows Vista及后续的某些版本中,尤其是在GPT硬盘上,即使在非UEFI环境下,也用作系统启动过程中的一部分,用于管理多启动选项并最终加载操作系统加载程序(对于传统BIOS启动可能是ntldr,对于支持EFI BIOS但不使用UEFI模式时则可能是另一个版本的引导管理器)。

总结起来,bootmgfw.efi 是专门为UEFI启动设计的引导管理器,而 bootmgr.efi 则是用于传统BIOS或早期混合启动环境的引导管理器。随着技术的发展和UEFI的普及,现代Windows操作系统更倾向于使用 bootmgfw.efi 进行引导

.efi文件的可编辑性说明:

  1. Bootmgfw.efi

    • 该文件是Windows操作系统(如Windows 8及以后版本)的UEFI引导管理器。由于它是微软操作系统的内部组件,个人用户通常不建议也不应该直接编辑这个二进制文件。任何修改可能会导致系统无法启动,并且可能违反软件许可协议。
  2. Bootx64.efi

    • 在某些情况下,它可能是Bootmgfw.efi的别名或用于其他操作系统的引导加载程序(例如,在Windows 7中,它可以由bootmgr复制并重命名为bootx64.efi以适应UEFI引导)。与Bootmgfw.efi类似,这个文件也不推荐个人用户自行编辑。
  3. Winload.efi

    • 这是Windows内核加载器,负责实际加载操作系统核心文件到内存中开始执行。同样,这是一个非常关键的系统组件,不应该由个人用户进行编辑。
  4. Grubx64.efi

    • 对于Linux发行版,grubx64.efi是GRUB2在UEFI环境下的引导加载程序。虽然Grub是开源软件,理论上可以编译和定制,但通常情况下,个人用户不是通过直接编辑.efi文件来配置GRUB,而是通过编辑其配置文件(如/boot/grub/grub.cfg)来更改引导菜单、内核选项等。如果确实需要修改源代码,那也是先修改源代码然后重新编译生成新的.efi文件。
  5. Boot.efi 和 Loader.efi

    • boot.efi有时是macOS中的引导加载程序名称,对应于boot.efiOpenCore.efi(对于黑苹果系统)。类似于上述情况,直接编辑这些文件存在风险,而且并非常规操作。
    • loader.efi在不同的上下文中可能有不同的含义,比如在某些Linux系统或者自定义引导加载程序中。如果是开源项目的一部分,那么可以通过修改源代码后重新编译来定制,而不是直接编辑.efi文件。

总结来说,除非你具备相应的专业知识,并了解修改带来的潜在风险和后果,否则不建议个人用户直接编辑以上提到的.efi文件。正确的做法通常是通过官方提供的工具或配置文件来进行设置和调整。对于开源项目,遵循社区指南和文档来进行安全的定制和编译。

安装Windows系统时bootmgfw.efi签名的流程:

  1. 构建和签名

    • 微软在发布Windows操作系统之前,会对其所有相关的组件进行编译和测试。其中就包括了bootmgfw.efi(即Windows Boot Manager)这一引导加载程序。
    • 在编译完成后,微软使用其私钥bootmgfw.efi文件进行数字签名。这个签名过程确保了文件的完整性,并证明该文件来自受信任的源头——微软公司。
  2. 包含在安装介质中

    • 签名后的bootmgfw.efi被包含在官方发布的Windows安装媒体(如ISO镜像、U盘安装包等)中。
  3. UEFI固件的信任链

    • 大多数支持Secure Boot功能的计算机出厂时,UEFI固件中预置了由微软或其他可信证书颁发机构颁发的公钥证书。这些公钥用于验证与之对应的私钥签名的合法性。
  4. 安装过程中的签名验证

    • 当用户启动安装介质并开始安装Windows时,UEFI固件会首先检查bootmgfw.efi是否带有有效的数字签名,并且该签名是否可以追溯到预置的信任链中的一个或多个证书。
    • 如果签名验证通过,UEFI固件将允许执行bootmgfw.efi,从而继续Windows的安装流程。
  5. 写入ESP分区

    • 安装过程中,Windows安装程序会在EFI系统分区(ESP)中正确放置和配置已签名的bootmgfw.efi以及其他必要的启动文件,确保它们符合UEFI和Secure Boot的要求。

综上所述,在安装Windows系统时,微软预先对bootmgfw.efi进行了签名,并确保在安装过程中能够顺利通过UEFI固件的安全启动机制验证。

本文标签: 固件 加载 程序 系统 Bootmgfw