コーディングで新しく追加されました。だから私はできるだけシンプルにしようとしています。私の目標は、ベンダー/シリアルのような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からのデータではありません印刷されます。 " - >"のみ
どのように動作しませんか?コンパイラエラー?実行中に予期しない動作が発生しましたか?詳細をご記入ください。 – RhinoDevel
そしてRT-> GetVariable()は何を返しますか? – unixsmurf