跳转至

构建目标

iPXE 使用类似这样的命令行构建:

  make bin/ipxe.pxe

第一部分(本例中为 bin)表示平台。ipxe 表示驱动程序,.pxe 表示启动类型。

  make [platform]/[driver].[extension]

bin 目录包含在 git 仓库中,但所有平台都会作为构建过程的一部分自动创建。

还有一些#特殊目标

平台

目前支持的平台有:

  • bin (bin-i386-pcbios 的别名)
  • bin-i386-pcbios
  • bin-i386-efi
  • bin-i386-linux
  • bin-x86_64-efi
  • bin-x86_64-linux
  • bin-x86_64-pcbios
  • bin-arm32-efi 支持有限,可用于 snp.efisnponly.efi,但不能用于 ipxe.efi
  • bin-arm64-efi
  • bin-arm64-linux

-efi 平台也可以在末尾加上额外的 -sb。在提交二进制文件进行 Secure Boot 签名时使用。

驱动程序

如副标题所示,这是要包含在构建中的驱动程序种类

  • ipxe 构建一个包含 iPXE 拥有的(几乎)所有基于 PCI 的网卡驱动程序的二进制文件 (目前在 arm 上不起作用,因为某些接口尚未在那里实现,请改为构建特定的驱动程序,例如 snp)
  • intel 或源代码中找到的其他驱动程序文件,则为该驱动程序构建
  • 808610de 包含给定 PCI ID 的特定 PCI 设备驱动程序的二进制文件。参见预期可正常工作的硬件列表
  • ecm--ncm 双破折号(--)把多个驱动程序添加到一个文件中,在本例中我们引入了大多数基于 USB 的驱动程序(你可以多次使用双破折号来添加两个以上的驱动程序)

一些常用变体及其原因:

  • ipxe 所有原生驱动程序,通常用于基于 USB 的启动介质,或 iPXE 不以链式加载方式使用的场合。
  • undionly 用于为 pcbios 平台构建可链式加载 iPXE 的驱动程序(不包含在 ipxe 中,因为 UNDI 栈无法可靠保留且仍让设备可供可能的原生 iPXE 驱动程序使用),与 ''.kpxe'' 扩展名一起使用
  • snponly 类似于 undionly,但用于 efi,使用由 EFI 环境中其他组件提供的 snp(Simple Network Protocol)或 nii(Network Interface Identifier Protocol),应该只找到并启动它被链式加载的那个特定网卡设备。
  • snpsnponly 相同,但尝试启动所有设备,而不仅仅是它被链式加载的那个设备,这也包含在 ipxe 构建中
  • efidrv.cab 用于签名的 efi 平台构建 cab 文件 commit
  • tests Linux 测试套件,示例:make bin-x86_64-linux/tests.linux && ./bin-x86_64-linux/tests.linux邮件列表上提供更多示例的帖子
  • tap Linux tap 驱动程序,与 .linux 启动类型一起使用,例如:bin-x86_64-linux/tap.linux –net tap,if=tap0,mac=00:0c:29:c5:39:a1
  • slirp Linux slirp 驱动程序,与 .linux 启动类型一起使用,参见 commit

启动类型

决定应向二进制文件添加哪种头部以及如何处理入口点。

扩展名 有效平台 描述
.pxe pcbios 无头 X86 汇编代码,通过 PXE 或 NBP 启动,有时重命名为 .0 以便在较旧的 DHCP/TFTP 服务器上工作
.efi efi EFI 可执行文件
.kpxe pcbios .pxe 相同,但会保留(Keep)原始的 UNDI 栈/驱动程序。这是 undionly 所必需的 参考
.kkpxe pcbios .kpxe 相同,但不会卸载(保留)PXE 基础代码。仅用于有 bug 的 BIOS
.lkrn pcbios 使用类似 Linux 的内核头构建,因此可以被许多引导加载程序启动
.iso pcbios 构建 .lkrn 并添加 ISOLINUX 以创建 CD-ROM 镜像,可以被许多引导加载程序启动
.hd pcbios 直接可执行的 i386 代码,放在硬盘镜像上(32KB 块)
.dsk pcbios 直接可执行的 i386 代码,放在软盘镜像上(512 字节块)
.pdsk pcbios 填充后的 .dsk,用于需要精确大小的加载器,例如 iLO
.usb pcbiosefi pcbios.dsk 相同;在 efi 模式下,它是一个带分区的 1440K 镜像,并添加 [driver].efi 作为 /efi/boot/boot[arch].efi,主要用于制作 USB 启动盘镜像
.raw pcbios 通用 raw,可与 RPL 一起使用 commit
.rom pcbios 用于烧录到基于 PCI 的网卡 ROM 的文件
.mrom pcbios 用于烧录到基于 PCI 的网卡 ROM 的文件。参见 关于 ''.mrom'' 的说明
.pcirom pcbios .rom 相同
.isarom pcbios 用于烧录到基于 ISA 的网卡 ROM 的文件,必须与 VirtualBox 等一起使用
.efidrv efi 可被其他 EFI 固件使用的网卡驱动程序
.efirom efi 用于烧录到 EFI 网卡 ROM 的文件
.linux linux Linux ELF 可执行文件,用于 testsslirptap 驱动程序

特殊目标

  • makemake all 相同
  • make all 预定义的最常见目标列表,并打印一些有用的提示信息
  • make everything 尝试为多个平台构建目标
  • make vmware VMware 的 ROM
  • make docmake bin/doc 相同
  • make [platform]/doc 构建 doxygen 文档
  • make docview 尝试在浏览器中打开 doxygen 文档

交叉编译

进行交叉编译时,你需要指定适当的 CROSS=… 参数来指定你的交叉工具链前缀。例如:make CROSS=aarch64-linux-gnu- bin-arm64-efi/ipxe.efi

请注意,你不需要(也不应该)显式指定 ARCH:它将根据构建目标的平台部分计算得出。GitHub issue 上的详细信息