我从来都对驱动程序不熟悉,现在才开始了解 UEFI,并试图通过这个例子来了解 UEFI 在多大程度上创建了自己的操作系统。
当我使用 USB 驱动器启动现代 Windows 10 系统(因此使用 UEFI)时,我相信主板 EFI 控制器会直接与 USB 控制器通信,直到它最终在 RAM 中获取“BOOTX64.EFI”代码,然后启动 CPU。(我可能至少应该写“有效启动” - 请原谅我过于简单的解释。)
然后,如果该 EFI 代码是专门为使用 USB 端口而设计的,则 CPU(而不是 EFI 控制器)将执行通信工作。用于此的 USB 驱动程序可以全部位于 EFI 分区中,因此我们假设它们与 Windows 无关。
然后,如果该代码最终启动 Windows(位于 USB 驱动器的第二个分区上),则 Windows 的 USB 驱动程序最终将被使用。
那么,我们真的可以拥有这 3 种不同的 USB 模式吗?为了突出差异,我将它们称为“无 CPU”、“UEFI 的 CPU”和“Windows 的 CPU”。
通常情况下,“UEFI 的 CPU”是可以忽略的(因为“BOOTX64.EFI”是 Windows 启动程序),所以我想知道这种模式是否完全被取消,转而采用“无 CPU”(由 CPU 对 EFI 控制器的某些调用生成)。
答案1
当我使用 USB 驱动器启动现代 Windows 10 系统(因此使用 UEFI)时,我相信主板 EFI 控制器会直接与 USB 控制器通信,直到它最终在 RAM 中获取“BOOTX64.EFI”代码,然后启动 CPU。(我可能至少应该写“有效启动” - 请原谅我过于简单的解释。)
不存在“EFI 控制器”之类的东西。EFI 是一种主系统固件,它与实际操作系统运行在同一 CPU 上。当您看到来自 EFI 的任何文本或图形时,CPU 和 RAM 已经完全初始化并运行。
此时,EFI 固件甚至与操作系统非常相似:它有一个在 CPU 上运行的内核;它使用整个系统 RAM;它有一个驱动程序框架(允许它访问 USB 设备、SATA 设备、NVMe 设备);它可以从文件系统读取文件并启动可执行文件(.efi 文件)。
因此,在大多数情况下,您需要处理两种模式:要么通过 UEFI 访问 USB 记忆棒,要么通过 Windows 访问。(尽管我见过一些主板有一些“预 UEFI”USB 支持,用于在固件 ROM 损坏时从拙劣的固件升级中恢复。)
CPU 确实有一个内部控制器,它处理最基本的系统初始化,例如英特尔称其为“管理引擎”,但它实际上并不直接启动主操作系统,它只启动 UEFI 固件。
所有用于此的 USB 驱动程序都可以位于 EFI 分区中,所以我们可以说它们与 Windows 无关。
不,EFI 分区通常不包含任何此类内容。大多数驱动程序(尤其是处理主板内置硬件所需的驱动程序)都直接嵌入在主板闪存中保存的主固件映像中。
(EFI 确实有从 EFI 分区加载外部驱动程序的功能,但那是非常稀有用于比较。它可用于加载文件系统驱动程序,例如,使 EFI 能够从 NTFS 分区加载文件。