构建目标¶
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.efi和snponly.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),应该只找到并启动它被链式加载的那个特定网卡设备。snp与snponly相同,但尝试启动所有设备,而不仅仅是它被链式加载的那个设备,这也包含在ipxe构建中efidrv.cab用于签名的 efi 平台构建 cab 文件 committestsLinux 测试套件,示例:make bin-x86_64-linux/tests.linux && ./bin-x86_64-linux/tests.linux,邮件列表上提供更多示例的帖子tapLinux tap 驱动程序,与.linux启动类型一起使用,例如:bin-x86_64-linux/tap.linux –net tap,if=tap0,mac=00:0c:29:c5:39:a1slirpLinux 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 |
pcbios、efi |
与 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 可执行文件,用于 tests、slirp 和 tap 驱动程序 |
特殊目标¶
make与make all相同make all预定义的最常见目标列表,并打印一些有用的提示信息make everything尝试为多个平台构建目标make vmwareVMware 的 ROMmake doc与make bin/doc相同make [platform]/doc构建 doxygen 文档make docview尝试在浏览器中打开 doxygen 文档
交叉编译¶
进行交叉编译时,你需要指定适当的 CROSS=… 参数来指定你的交叉工具链前缀。例如:make CROSS=aarch64-linux-gnu- bin-arm64-efi/ipxe.efi
请注意,你不需要(也不应该)显式指定 ARCH:它将根据构建目标的平台部分计算得出。GitHub issue 上的详细信息