我正在尝试为 ARM 上的 CentOS 7 设置无盘 UEFI + PXE + NFS 启动。通常,该过程如下所示:
- 客户端 CPU 启动 UEFI 固件
- 客户端 UEFI 的 PXE 固件从网络请求 DHCP
- 服务器提供 IP、TFTP 服务器 IP、PXE NBP(网络引导程序)文件名
- 客户端 UEFI 从 TFTP 服务器加载 NBP
- 客户端 UEFI 执行 NBP,从 TFTP 服务器加载内核映像
- 客户端 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)服务器,
- 将你的内核和 initramfs 复制到你的 TFTP 根目录(通常
/var/lib/tftpboot
) - 复制
grubaa64.efi
到/boot/efi/EFI/centos/
你的 TFTP 根目录(或./boot/
子目录) 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 }
将 DHCP 服务器
grubaa64.efi
指向pxelinux.0
- 就是这样!尝试
grub.cfg
在 TFTP 服务器上进行编辑,然后选择“刷新 GRUB 菜单”,看看它是否提取了新配置