【发布时间】:2020-06-29 15:11:22
【问题描述】:
我在从内存加载和启动图像时遇到问题。 这是代码:
UINT8 *Buffer;
typedef struct
{
MEMMAP_DEVICE_PATH Node1;
EFI_DEVICE_PATH_PROTOCOL End;
} MEMORY_DEVICE_PATH;
STATIC CONST MEMORY_DEVICE_PATH mMemoryDevicePathTemplate =
{
{
{
HARDWARE_DEVICE_PATH,
HW_MEMMAP_DP,
{
(UINT8)(sizeof(MEMMAP_DEVICE_PATH)),
(UINT8)((sizeof(MEMMAP_DEVICE_PATH)) >> 8),
},
}, // Header
0, // StartingAddress (set at runtime)
0 // EndingAddress (set at runtime)
}, // Node1
{
END_DEVICE_PATH_TYPE,
END_ENTIRE_DEVICE_PATH_SUBTYPE,
{sizeof(EFI_DEVICE_PATH_PROTOCOL), 0}} // End
};
MEMORY_DEVICE_PATH BufferDevicePath = mMemoryDevicePathTemplate;
BufferDevicePath.Node1.StartingAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)Buffer;
BufferDevicePath.Node1.EndingAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)Buffer + BufferSize;
Prnt("Loading Image...");
Status = gBS->LoadImage(
TRUE,
gImageHandle,
(EFI_DEVICE_PATH *)&BufferDevicePath,
Buffer,
BufferSize,
&ImageHandle);
if (!EFI_ERROR(Status))
{
Status = gBS->StartImage (ImageHandle, NULL, NULL);
if (EFI_ERROR(Status))
{
Prnt("Error Starting image ... Status=%08x", Status);
}
}
else {
Prnt("Error Loading image ... Status=%08x", Status);
}
通过 UEFI Shell 使用 load 加载(而不是从内存中)图像,验证该图像没有问题。
但是在这种情况下没有错误,图像似乎已启动但机器卡住了,左上角出现黑屏和白色光标。
【问题讨论】: