chenall / grub4dos

外部命令和工具源码:https://github.com/chenall/grubutils 下载:
http://grub4dos.chenall.net
GNU General Public License v2.0
629 stars 132 forks source link

EFI PXE: Cannot configure correct gateway #432

Closed DynamicLoader closed 7 months ago

DynamicLoader commented 7 months ago

问题描述

如题。尝试使用 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)

yaya2007 commented 7 months ago

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

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

DynamicLoader commented 7 months ago

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

image

DynamicLoader commented 7 months ago

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

yaya2007 commented 7 months ago

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

DynamicLoader commented 7 months ago

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

yaya2007 commented 7 months ago

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

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

DynamicLoader commented 7 months ago

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

image

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

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

DynamicLoader commented 7 months ago

补充:使用ISO启动 G4E 可以正确获得内存信息,但是磁盘还是找不到,包括光盘。 如图:

image

注意到内存起始地址是0x1000。

yaya2007 commented 7 months ago

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

DynamicLoader commented 7 months ago

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

yaya2007 commented 7 months ago

我的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

DynamicLoader commented 7 months ago

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