如何在 Hyper-V 上挂载并运行 bootx64.efi 文件?

如何在 Hyper-V 上挂载并运行 bootx64.efi 文件?

我已经建造了一个降 B 形可在 UEFI 上直接运行的示例应用程序。现在我有了启动文件夹和bootx64.efi我的应用程序的文件。

我做错了什么导致此应用程序无法运行?图像文件有问题还是其他问题?

如果您想检查的话,这是我尝试运行的文件:https://file.io/b5cg47YHEkXZ

此外,这是在 QEMU 上运行此示例应用程序的说明:https://github.com/bflattened/bflat/tree/master/samples/Snake#:~:text=To%20run%20this%20with%20QEMU

更新:这是我制作虚拟机的步骤:

  1. 我在包含以下文件的源文件夹中打开 CMDefi/boot/...
  2. 我打开diskpart并运行以下命令:
Microsoft DiskPart version 10.0.22621.1

Copyright (C) Microsoft Corporation.
On computer: MATIN

DISKPART> create vdisk file=F:\disk.vhdx maximum=500

  100 percent completed

DiskPart successfully created the virtual disk file.

DISKPART> select vdisk file=F:\disk.vhdx

DiskPart successfully selected the virtual disk file.

DISKPART> attach vdisk

  100 percent completed

DiskPart successfully attached the virtual disk file.

DISKPART> convert gpt

DiskPart successfully converted the selected disk to GPT format.

DISKPART> create partition efi size=100

DiskPart succeeded in creating the specified partition.

DISKPART> format quick fs=fat32 label="System"

  100 percent completed

DiskPart successfully formatted the volume.

DISKPART> assign letter="X"

DiskPart successfully assigned the drive letter or mount point.

DISKPART> exit
  1. 然后,我将文件复制到附加驱动器X:
C:\Source\bflat\samples\Snake>xcopy efi\boot\BOOTX64.EFI X:\EFI\BOOT\
efi\boot\BOOTX64.EFI
1 File(s) copied
  1. 之后,我重新打开diskpart并运行以下命令:
Microsoft DiskPart version 10.0.22621.1

Copyright (C) Microsoft Corporation.
On computer: MATIN

DISKPART> select vdisk file=F:\disk.vhdx

DiskPart successfully selected the virtual disk file.

DISKPART> select partition 2

Partition 2 is now the selected partition.

DISKPART> remove letter=X

DiskPart successfully removed the drive letter or mount point.

DISKPART> detach vdisk

DiskPart successfully detached the virtual disk file.

DISKPART> exit
  1. 现在,根据给出的说明,虚拟磁盘已准备就绪。因此,我打开 Hyper-V 管理器并执行New -> Virtual Machine
  2. 我给它命名BootTest并将位置设置为默认
  3. 然后,我将 Generation 设置为 Gen-2 以支持 UEFI
  4. 我分配了 2048MB 内存并禁用了动态内存,因为它可能会导致问题
  5. 然后,我将连接设置为“未连接”
  6. 接下来,我将存储在驱动器中的 VHDX 文件连接F:到虚拟机,如下所示:

Hyper-V

  1. 现在,摘要中显示的内容如下:
Description:

Name:
Generation: Generation 2
Memory:
Network:
Hard Disk:

BootTest

2048 MB
Not Connected
F:\disk.vhdx (VHDX, fixed size)

我还禁用了安全启动,因为它也可能会导致问题:

配置

现在,我打开虚拟机连接到它,并运行它,这是显示的错误:

错误

答案1

您链接的说明不包含有关创建 ISO 映像的任何内容。要实现 UEFI 引导,ISO 映像必须满足某些要求。除非绝对必须是 ISO 映像,否则我建议坚持使用说明中的方法:创建虚拟磁盘映像,然后将其作为虚拟硬盘附加到 VM。

我将引用相关说明从此页面这里:

如果您使用的是 Windows,您也可以在 Hyper-V 下执行此操作。

首先创建一个具有 FAT32 文件系统的虚拟磁盘:

$ diskpart
create vdisk file=disk.vhdx maximum=500
select vdisk file=disk.vhdx
attach vdisk
convert gpt
create partition efi size=100
format quick fs=fat32 label="System"
assign letter="X"
exit
$ xcopy efi\boot\BOOTX64.EFI X:\EFI\BOOT\
$ diskpart
select vdisk file=disk.vhdx
select partition 2
remove letter=X
detach vdisk
exit

然后使用该硬盘创建一个 Gen2 虚拟机。确保禁用安全启动。

我已经验证了这是可行的。结果不是很漂亮,但游戏可以运行并且可控制。

您需要在某些点调整指令,例如路径disk.vhdx需要是绝对的。

相关内容