跳转至

下载

预编译二进制文件

你可以从 https://boot.ipxe.org/ipxe.iso 下载预编译的 iPXE ISO 镜像。这个镜像适合用来初次体验 iPXE。要充分发挥 iPXE 的功能,你需要从源代码构建合适的镜像。

源代码

iPXE 源代码维护在 https://github.com/ipxe/ipxe 的 git 仓库中。你可以用以下命令检出一份代码:

  git clone https://github.com/ipxe/ipxe.git

然后构建:

  cd ipxe/src
  make

构建 iPXE 至少需要安装以下软件包:

  • gcc
  • binutils
  • make
  • perl
  • liblzma 或 xz 头文件
  • mtools
  • mkisofs 或 genisoimage 或 xorrisofs(仅构建 .iso 镜像时需要)
  • syslinux(提供 isolinux,仅构建 .iso 镜像时需要)

选择要构建的目标

使用引导 CD-ROM 或 U 盘

A CD-ROM

你可以把 iPXE 放到可引导的 CD-ROM 或 U 盘上,用它引导(几乎)任何机器。如果你只是偶尔需要用 iPXE 引导机器,或者你面对的是自己无权管理的计算机,这种方式会很有用。

构建 iPXE 可引导 CD-ROM 镜像:

  make bin/ipxe.iso

然后把 bin/ipxe.iso 刻录到空白的 CD-ROM 或 DVD-ROM 上。

构建 iPXE 可引导 U 盘镜像:

  make bin/ipxe.usb

然后用以下命令把镜像写入空白 U 盘:

  dd if=bin/ipxe.usb of=/dev/sdX

其中 /dev/sdX 是代表你的 U 盘的设备。请注意,这会清除 U 盘上原有的全部内容。

从现有 PXE ROM 链式加载

A chain

你可以从现有的 PXE ROM 链式加载(chainload)iPXE。如果你有大量机器想用 iPXE 引导,但又不想逐台重刷网卡 ROM,这种方式就很实用。

构建可链式加载的 iPXE 镜像:

  make bin/undionly.kpxe

接下来就可以配置网络进行链式加载了。

替换现有的 PXE ROM

你可以用 iPXE 替换网卡(或主板)上的 PXE ROM。如果你希望机器始终能用 iPXE 引导,而不依赖 CD-ROM 或链式加载器,可以采用这种方式。

你需要针对具体的网卡构建 ROM 镜像,命令类似:

  make bin/808610de.rom

其中 808610de 由网卡的 PCI 厂商 ID 和设备 ID 组成。完整说明见 ROM 烧录教程

Some PXE ROMs

高级主题

嵌入式脚本

你可以使用嵌入式脚本改变 iPXE 的默认行为。例如,你可能希望构建一个这样的 iPXE 版本:先通过 DHCP 获取 IP 地址,然后从预定义的 SAN 目标引导。

命名配置

使用命名配置,可以在同一份代码库的基础上构建出不同配置的二进制文件。这样就能方便地实现:一个配置用于 ROM,一个配置用于链式加载的二进制文件,还有一个配置用于 UEFI 二进制文件。

调试构建

A null-modem cable

iPXE 内置了完善的调试功能,可以在构建时通过指定一组 DEBUG 对象来有选择地启用。例如,要排查涉及 iSCSI 的问题,可以启用 iSCSI 协议驱动(位于 iscsi.c)的调试:

  make bin/ipxe.iso DEBUG=iscsi

如果你发现问题不在 iscsi.c 中,可以再加上 SCSI 层(位于 scsi.c)的调试:

  make bin/ipxe.iso DEBUG=scsi,iscsi

许多对象提供多个调试级别。例如,要为每条 SCSI 命令输出一条调试消息,可以使用:

  make bin/ipxe.iso DEBUG=scsi:3,iscsi

数字调试级别(本例中为 3)是一个位掩码:

含义
1 启用基本调试消息
2 启用详细调试消息(例如每个事件一条消息)
4 启用超详细调试消息(例如每个字节一条消息)
8 启用 I/O 跟踪(例如每次 readl()/writel() 调用一条消息)

你可能希望启用串口控制台(config/console.h 中的 CONSOLE_SERIAL),并连接一条 null-modem 线缆来捕获输出。如果需要修改默认的 115200,8N1 设置,可以在 config/serial.h 中配置串口参数。如果没有可用的串口,用数码相机对着屏幕拍照往往也是个出乎意料的替代办法!

大型 ROM 镜像

A PXE ROM

如果启用了大量 iPXE 特性,ROM 可能会变得过大而无法使用。有些网卡不支持超过 64kB 的 ROM,有些 BIOS 在存在较大 ROM 镜像时可能无法完成加电自检(POST)。

你可以使用 .mrom 镜像来缓解其中的一些问题。.mrom 镜像在 BIOS 看来只是一个非常小的(3kB)ROM,其中只包含一个很小的加载器存根。完整的 iPXE 镜像只有在 BIOS 尝试从网卡引导时才会被加载。

构建 .mrom 镜像只需把 .rom 改成 .mrom。例如:

  make bin/808610de.rom    # 普通的 .rom 镜像
  make bin/808610de.mrom   # .mrom 镜像

.mrom 镜像的烧录方式与普通 .rom 镜像完全相同。

并非所有网卡都支持 .mrom 镜像。要支持 .mrom 镜像,网卡必须至少有一个不小于其扩展 ROM BAR 的 PCI 内存 BAR。例如,如果网卡有 128kB 的扩展 ROM BAR 和 256kB 的内存 BAR,那么它就能支持最大 128kB 的 .mrom 镜像。

UEFI

iPXE 同时支持 UEFI 和 BIOS 平台。你可以使用 .efirom 镜像格式构建 UEFI ROM。例如:

  make bin-x86_64-efi/808610de.efirom

其中 808610de 由网卡的 PCI 厂商 ID 和设备 ID 组成。

你也可以构建 .efi 可执行文件,从现有的 UEFI ROM 链式加载它(或直接从 UEFI shell 运行):

  make bin-x86_64-efi/ipxe.efi