我从来没有对驱动程序感到满意,我刚刚学习 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”。
通常,“CPU for UEFI”是可以忽略的(因为“BOOTX64.EFI”是Windows启动程序),所以我想知道这种模式是否完全被“无CPU”所取代(由CPU对电喷控制器)。
没有“EFI 控制器”之类的东西。EFI 是一种主系统固件,它运行在与实际操作系统相同的 CPU 上。当您看到来自 EFI 的任何类型的文本或图形时,CPU 和 RAM 将已经完全初始化并运行。
那时,EFI 固件的工作方式甚至与操作系统非常相似:它有一个在 CPU 上运行的内核;它使用整个系统 RAM;它有一个驱动框架(允许它访问 USB 设备、SATA 设备、NVMe 设备);它可以从文件系统读取文件,并且可以启动可执行文件(.efi 文件)。
因此,在大多数情况下,您要处理两种模式:USB 记忆棒由 UEFI 访问,或者由 Windows 访问。(虽然我看到一些主板有一些“pre-UEFI”USB 支持,用于在固件 ROM 损坏时从拙劣的固件升级中恢复。)
CPU 确实有一个内部控制器来处理最基本的系统初始化,例如英特尔将其称为“管理引擎”,但它实际上并不直接启动主操作系统,它只启动 UEFI 固件。
不,EFI 分区通常不包含任何这些内容。大多数驱动程序,尤其是处理主板内置硬件所必需的驱动程序,都直接嵌入到保存在主板闪存中的主固件映像中。
(EFI 确实具有从 EFI 分区加载外部驱动程序的功能,但相比之下很少使用。它可以用于加载文件系统驱动程序,例如,使 EFI 能够从 NTFS 分区加载文件。)