2017-01-27 14 views
0

새로운 코딩 있음. 그래서 나는 그것을 가능한 한 간단하게 유지하려고 노력한다. 제 목표는 공급 업체/시리얼과 같은 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; 
         ^~~~~~~~~~~~~~~~~~~ 

가변적이고의 데이터가 아니다 인쇄. "->"만

+0

어떤 방식으로 작동하지 않습니까? 컴파일러 오류? 실행 중 예기치 않은 동작이 발생 했습니까? 자세한 내용을 입력하십시오. – RhinoDevel

+0

그리고 RT-> GetVariable()은 무엇을 반환합니까? – unixsmurf

답변

0

vendorguid, 속성 및 datasize에 대한 유형 대신 포인터를 사용하고 할당되지 않은 버퍼에 쓰려고합니다. Sample code for reference.

+0

고마워요! 작동하는 것 같아요 ... 데이터를 유니 코드로 변환하여 올바른 인쇄 방법을 찾아야합니다. 제품 코드와 같은 것들이 시리얼과 같은 smbios 데이터 안에 저장됩니다, 다음 주제가 될 것입니다 ... ;-) – KingBonecrusher

+0

인쇄 대신 APrint를 사용하여 ASCII 데이터로 작업하십시오. – CodeRush