iPXE UEFI 愿景¶
背景¶
iPXE 的成功很大程度上来自于超越标准 PXE 模型的限制。用户选择 iPXE,是因为它有能力执行超出传统 PXE ROM 范围的任务:例如通过 HTTP 启动、通过 iSCSI 启动、用脚本控制启动过程、创建动态菜单等。符合 PXE 规范是必需的——iPXE 要作为 OEM PXE 栈提供就必须如此——但正是这些更高级的特性造就了 iPXE 的成功。

目前向 UEFI 固件的转向,在网络引导的用户体验上代表着一种倒退。UEFI 采用的模型与传统 PXE 规范本质上完全相同。~~iPXE 目前在 UEFI 环境中仅提供一个普通的 SNP 接口,因此用户体验仅限于标准的 UEFI 网络引导;iPXE 的高级特性(如 HTTP、DNS、脚本等)尚不可用。~~
~~从最终用户的角度来看,iPXE UEFI 驱动程序和基于 EDK2 的驱动程序目前提供相同的功能。~~
![]()
自这份愿景声明撰写以来,iPXE UEFI 愿景已基本实现,上述限制不再适用。iPXE UEFI 驱动程序现在提供的用户体验几乎与 iPXE BIOS 驱动程序提供的用户体验一样功能完整。
愿景¶
iPXE 将在 UEFI 环境中提供与目前在 BIOS 环境中提供的相同的高级特性。
UEFI iPXE option ROM 将提供两个入口点:
- 一个 SNP 驱动程序。它相当于 BIOS 环境中的 UNDI 驱动程序。它提供对 UEFI 规范的符合性,正如 UNDI 驱动程序提供对 PXE 规范的符合性一样。
- 系统启动菜单中的一个"使用 iPXE 启动"选项。它将提供对完整 iPXE 特性集的访问,并且看起来几乎与 BIOS 环境中的 iPXE 启动完全相同。HTTP 和脚本等特性将可用,用户将能够利用他们已有的 iPXE 知识和投入。
指导原则是:iPXE 应当超越标准 UEFI 模型的限制,以复制它通过超越标准 PXE 模型的限制所取得的成功。
优势¶
与传统 EDK2 option ROM 相比,iPXE UEFI option ROM 具有以下优势:
对所有用户¶

- iPXE UEFI option ROM 将提供 iPXE 的全部高级特性,例如 HTTP 启动、脚本、DNS 和 FCoE。传统 EDK2 option ROM 仅提供 SNP 接口。
- iPXE UEFI option ROM 可与用户现有的 iPXE 脚本和启动基础设施(Web 服务器、脚本生成器、证书颁发机构等)协同工作。传统 EDK2 option ROM 将要求用户放弃现有投入并创建新的启动基础设施。
- iPXE UEFI option ROM 将提供 iPXE 的高级错误报告能力。传统 EDK2 option ROM 将局限于标准的 UEFI 错误报告能力。例如,一条 iPXE 错误消息可能是"
Could not configure net0: Timed out (http://ipxe.org/4c106035)",给出一个包含针对该问题的故障排除提示和联系方式的 URL,而一条标准 UEFI 错误消息可能只是简单的"Timed out"。
- 无论底层固件有何限制,iPXE UEFI option ROM 都将提供 iPXE 的高级特性。传统 EDK2 option ROM 将局限于仅支持平台 OEM 实现的那些特性。例如,如果平台 OEM 选择不支持 iSCSI,那么传统 EDK2 option ROM 将无法执行 iSCSI 启动。由于 iPXE 包含自己的 iSCSI 发起端,它不会受到这种限制。
- iPXE UEFI option ROM 将包含自己的 TCP/IP 栈、HTTP 客户端、iSCSI 发起端等,因此不会受到底层固件对这些特性的实现中(如果有)的 bug 影响。传统 EDK2 option ROM 将不得不忍受平台固件中的任何 bug,导致糟糕的用户体验并增加支持负担。
- iPXE UEFI option ROM 只需使用现有的厂商工具重新刷写 option ROM,即可添加高级特性(以及修复 bug)。对于传统 EDK2 option ROM,添加或修复高级特性(如 iSCSI 启动)的唯一方法是重新刷写整个平台固件。由于平台固件通常不是开源的,用户往往根本无法执行这样的修复。

对开发者和 OEM¶
- iPXE UEFI option ROM 使用现有的、久经考验的 iPXE 代码库,驱动程序代码在 UEFI 和 BIOS 构建之间共享。传统 EDK2 option ROM 需要从头开发一个完全独立的代码库。
- iPXE UEFI option ROM 具有符合相关 ANSI、ISO 和 POSIX 标准的编程环境,使用
malloc()和printf()等标准 C 库函数。传统 EDK2 option ROM 具有非标准的专有编程环境,使用gBootServices->AllocatePool()和simpleTextOutputProtocol->OutputString()之类的函数。
- 与同等(但能力更弱的)传统 EDK2 option ROM 驱动程序相比,iPXE UEFI option ROM 驱动程序的代码行数通常少 50%-80%。