一、修改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