새로운 코딩 있음. 그래서 나는 그것을 가능한 한 간단하게 유지하려고 노력한다. 제 목표는 공급 업체/시리얼과 같은 uefi 변수를 읽고 다시 인쇄하는 것입니다. 내 코드가 제대로 작동하지 않습니다. gnu-efi를 사용하는 IAM.UEFI에서 변수를 읽습니다. RT-> GetVariable
include "efi.h"
include "efilib.h"
CHAR16* name;
EFI_GUID* vendorguid = EFI_GLOBAL_VARIABLE;
UINT32* attributes;
UINTN* datasize;
VOID* data;
EFI_STATUS
EFIAPI
efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable){
InitializeLib(ImageHandle, SystemTable);
uefi_call_wrapper(ST->ConOut->SetMode, 2, ST->ConOut, 0);
uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_WHITE | EFI_BACKGROUND_RED);
uefi_call_wrapper(ST->ConOut->ClearScreen, 2, ST->ConOut);
RT->GetVariable(L"Product", vendorguid, attributes, datasize, data);
Print(L"-> %s", data);
for(;;) __asm__("hlt");
return EFI_SUCCESS;
}
나는 컴파일러 경고의 무리를 가지고 있지만 컴파일 될 것입니다 : 내가 장치에서 excute에 경우 화면이 올바른 빨간색으로 변했지만
test.c:79:25: note: in expansion of macro 'EFI_GLOBAL_VARIABLE'
EFI_GUID* vendorguid = EFI_GLOBAL_VARIABLE;
^~~~~~~~~~~~~~~~~~~
/usr/include/efi/efiapi.h:210:35: warning: excess elements in scalar initializer
{ 0x8BE4DF61, 0x93CA, 0x11d2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} }
^
test.c:79:25: note: in expansion of macro 'EFI_GLOBAL_VARIABLE'
EFI_GUID* vendorguid = EFI_GLOBAL_VARIABLE;
^~~~~~~~~~~~~~~~~~~
/usr/include/efi/efiapi.h:210:35: note: (near initialization for 'vendorguid')
{ 0x8BE4DF61, 0x93CA, 0x11d2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} }
^
test.c:79:25: note: in expansion of macro 'EFI_GLOBAL_VARIABLE'
EFI_GUID* vendorguid = EFI_GLOBAL_VARIABLE;
^~~~~~~~~~~~~~~~~~~
가변적이고의 데이터가 아니다 인쇄. "->"만
어떤 방식으로 작동하지 않습니까? 컴파일러 오류? 실행 중 예기치 않은 동작이 발생 했습니까? 자세한 내용을 입력하십시오. – RhinoDevel
그리고 RT-> GetVariable()은 무엇을 반환합니까? – unixsmurf