我已经建造了一个降 B 形可在 UEFI 上直接运行的示例应用程序。现在我有了启动文件夹和bootx64.efi
我的应用程序的文件。
我做错了什么导致此应用程序无法运行?图像文件有问题还是其他问题?
如果您想检查的话,这是我尝试运行的文件:https://file.io/b5cg47YHEkXZ
此外,这是在 QEMU 上运行此示例应用程序的说明:https://github.com/bflattened/bflat/tree/master/samples/Snake#:~:text=To%20run%20this%20with%20QEMU
更新:这是我制作虚拟机的步骤:
- 我在包含以下文件的源文件夹中打开 CMD
efi/boot/...
- 我打开
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
- 然后,我将文件复制到附加驱动器
X:
:
C:\Source\bflat\samples\Snake>xcopy efi\boot\BOOTX64.EFI X:\EFI\BOOT\
efi\boot\BOOTX64.EFI
1 File(s) copied
- 之后,我重新打开
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
- 现在,根据给出的说明,虚拟磁盘已准备就绪。因此,我打开 Hyper-V 管理器并执行
New -> Virtual Machine
- 我给它命名
BootTest
并将位置设置为默认 - 然后,我将 Generation 设置为 Gen-2 以支持 UEFI
- 我分配了 2048MB 内存并禁用了动态内存,因为它可能会导致问题
- 然后,我将连接设置为“未连接”
- 接下来,我将存储在驱动器中的 VHDX 文件连接
F:
到虚拟机,如下所示:
- 现在,摘要中显示的内容如下:
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
需要是绝对的。