chenall/grub4dos

EFI PXE: Cannot configure correct gateway

DynamicLoader opened this issue · 12 comments

问题描述

如题。尝试使用 iPXE 引导 EFI 版本的 G4D, 在ipxe下正常获取网关IP并且拿到 BOOTX64.EFI 并启动。
但是,启动后没有进菜单,而是直接进了命令行,头一句提示还是
Couldn't get file size
且在命令执行的过程中频繁报这个错误,如下图所示:

屏幕截图 2023-12-03 114258

不仅不能正常拿到 Gateway,pxe设备也无法正常运行,如上图。

而使用非 EFI 版本的 G4D 就没有问题,如图:
屏幕截图 2023-12-03 112457

目录结构:

Z:\TFTP
│  boot.ipxe
│  boot.ipxe.cfg
│  BOOTIA32.EFI
│  BOOTX64.EFI
│  grldr
│  ipxe.efi
│  kernel.img
│  menu.ipxe
│  undionly.kpxe
│
└─iso
        A7PE.iso
        coen-1.0.0-amd64.iso
        petools64.iso
        ubun23s.iso
        Win10PEx32x64.iso
        Win7.ISO

这里的 Z:\TFTP 是通过SMB挂载到Win下的目录,也是tftp服务器的根目录。

环境信息

主OS: Win11 22H2
虚拟机: VMware Pro 16.2.4 build-20089737 , 4C8G 测试虚机
TFTP服务:Openwrt下采用 dnsmasq 部署,附带 DHCP 服务
HTTP服务:不涉及
版本信息:G4D: 0.4.6a-2023-11-27, G4D EFI: 2023-11-29, iPXE:1.21.1+(g98dd)

G4E的菜单应当放在
/efi/grub/menu.lst

另外,我是使用“TinyPXEServer-win服务端”网起的。

感谢回复。这里还暴露出另外一个问题,就是这样网启似乎G4E不兼容,不仅内存大小获取不到,连本地硬盘都找不到,只有rd和pd。这是哪里出了问题呢?

image

BTW,使用“TinyPXEServer-win服务端”也不行,现象一致。

我只是在VM虚拟机测试过。
我这里可以获得内存尺寸,也可以探测到虚拟硬盘,而且可以启动上面的镜像。
要使用11.29版本。

11.29和10.16都测过,都一样捏。。

也许对ipxe支持不好,或许就不支持ipex。

试一试这个。
TinyPXEServer-win服务端.part1.rar.txt
TinyPXEServer-win服务端.part2.rar.txt

还是一样。即便不通过iPXE加载,而是直接由固件的PXE启动,g4e也没法获取正确的磁盘和内存信息。这大概要开一个新的issue讨论了。我挺怀疑是不是VMware的EFI固件不太符合官方规定导致的。

image

附图是使用您提供的端和文件,采用我这里的虚拟机环境测试的结果。

搜了一圈,也没有找到任何代码会输出 "Couldn't get file size",包括g4e和ipxe,感觉就是固件内部的API没兼容。
VMware报告的版本如下:
image
不知道g4e要求的最低EFI版本是多少。

补充:使用ISO启动 G4E 可以正确获得内存信息,但是磁盘还是找不到,包括光盘。
如图:
image
注意到内存起始地址是0x1000。

这个警告"Couldn't get file size"是由G4E的PXE模块发出来的。使用uefi内部MFTPT协议获得文件尺寸返回的错误提示。
难道是你的VM虚拟机的uefi固件版本太低,不支持?我的版本是2.28。

2.40应该比2.28高呀。按说应该有向后兼容性的。请问一下,您使用的是哪个vm?什么版本?

我的VM是:
产品:VMware® Workstation 16 Pro
版本:16.2.5 build-20904516
内存:8096 MB
主机操作系统:Windows 10 Pro, 64-bit (Build 19045.3693) 10.0.19045

虚拟机内存:2Gb
网络适配器:NAT

更新了版本,仍然是不行。难道和物理环境有关系?不管了,就那样吧。