如何使用 ARM 进行 PXE 启动?

如何使用 ARM 进行 PXE 启动?

我正在尝试为 ARM 上的 CentOS 7 设置无盘 UEFI + PXE + NFS 启动。通常,该过程如下所示:

  1. 客户端 CPU 启动 UEFI 固件
  2. 客户端 UEFI 的 PXE 固件从网络请求 DHCP
  3. 服务器提供 IP、TFTP 服务器 IP、PXE NBP(网络引导程序)文件名
  4. 客户端 UEFI 从 TFTP 服务器加载 NBP
  5. 客户端 UEFI 执行 NBP,从 TFTP 服务器加载内核映像
  6. 客户端 NBP 执行内核映像,通过 NFS 挂载文件系统

每一个PXE 启动引导我最终可以找到需要 pxelinux.0,来自系统Linux,作为 NBP(步骤 3、4、5)。Syslinux 不支持 ARM(据我所知?)。考虑到这一点:

有人可以描述如何通过 PXE 启动 aarch64?

答案1

以下是我最终的发现和解决方案,得到了很多评论的帮助!

  • Syslinux 不支持 ARM
  • 即使有,也pxelinux.0只适用于 BIOS,不适用于 UEFI
  • 使用 GRUB2 代替 Syslinux

假设已经根据许多指南设置了 PXE(DHCP + TFTP)服务器,

  1. 将你的内核和 initramfs 复制到你的 TFTP 根目录(通常/var/lib/tftpboot
  2. 复制grubaa64.efi/boot/efi/EFI/centos/你的 TFTP 根目录(或./boot/子目录)
  3. grub.cfg在同一目录中创建一个配置文件

    (GRUB 将/视为您的 TFTP 根目录。根据需要更改linux& )initrd

    menuentry 'Shared CentOS (4.5.0-23.el7.aarch64)' {
        linux       /vmlinuz-4.5.0-23.el7.aarch64 rw root=/dev/nfs ip=dhcp nfsroot=/netboot/CentOS_7.3 enforcing=0
        initrd      /initramfs-nfs-only.img
    }
    menuentry 'Refresh GRUB menu' {
        configfile  /boot/grub.cfg
    }
    
  4. 将 DHCP 服务器grubaa64.efi指向pxelinux.0

  5. 就是这样!尝试grub.cfg在 TFTP 服务器上进行编辑,然后选择“刷新 GRUB 菜单”,看看它是否提取了新配置

相关内容