2017-01-27 11 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; 
         ^~~~~~~~~~~~~~~~~~~ 

varaibleからのデータではありません印刷されます。 " - >"のみ

+0

どのように動作しませんか?コンパイラエラー?実行中に予期しない動作が発生しましたか?詳細をご記入ください。 – RhinoDevel

+0

そしてRT-> GetVariable()は何を返しますか? – unixsmurf

答えて

0

vendorguid、attributes、およびdatasizeの代わりにポインタを使用しており、割り当てられていないバッファに書き込もうとしています。 Sample code for reference

+0

ありがとう!私はデータをユニコードに変換して正しいものを印刷する方法を見つける必要があります。製品コードとシリアルのようなものはsmbiosデータの中に保存されます。それは次のトピックになります... ;-) – KingBonecrusher

+0

印刷の代わりにAPrintを使用してASCIIデータを処理します。 – CodeRush

関連する問題