一、修改protocol.c
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <stdio.h>
EFI_STATUS
EFIAPI
UefiMain(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
) {
EFI_STATUS Status = EFI_SUCCESS;
UINTN NoHandles = 0;
EFI_HANDLE *Buffer = NULL;
Status = gBS->LocateHandleBuffer(
ByProtocol,
&gEfiGraphicsOutputProtocolGuid,
NULL,
&NoHandles,
&Buffer
);
Print(L"Status = %d", Status);
if (EFI_ERROR(Status)) {
Print(L"Failed to LocateHandleBuffer. \n");
return Status;
}
Print(L"Hello, Protocol\n");
EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop;
Status = gBS->OpenProtocol(
Buffer[0],
&gEfiGraphicsOutputProtocolGuid,
(VOID**)&Gop,
ImageHandle,
NULL,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
);
Print(L"Status = %d", Status);
if (EFI_ERROR(Status)) {
Print(L"Failed to OpenProtocol. \n");
return Status;
}
UINTN SizeOfInfo = 0;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
UINTN i = 0;
for (; i < Gop->Mode->MaxMode; i++) {
Status = Gop->QueryMode(Gop, i, &SizeOfInfo, &Info);
if (EFI_ERROR(Status)) {
Print(L"Failed to Querymode. \n");
return Status;
}
PrintL(L"Mode %d, H = %d, V = %d", i, Info->HorizontalResolution, Info->VerticalResolution);
}
Status = Gop->SetMode(Gop, 22);
if (EFI_ERROR(Status)) {
Print(L"Failed to Querymode. \n");
return Status;
}
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Red = {0, 0, 255, 0};
Gop->Blt(
Gop,
&Red,
EfiBltVideoFill,
0,0,
0,0,
100,100,
0
);
if (EFI_ERROR(Status)) {
Print(L"Failed to Blt. \n");
return Status;
}
Gop->Blt(
Gop,
&Red,
EfiBltVideoFill,
0,0,
200, 200,
100,100,
0
);
if (EFI_ERROR(Status)) {
Print(L"Failed to Blt. \n");
return Status;
}
return Status;
}
二、build