我怎样才能让协议在 GNU-EFI 下工作?
How can I get a protocol working under GNU-EFI?
我使用 GNU-EFI 开发 UEFI 应用程序。我在获取在 GNU-EFI 下工作的协议 (EFI_SHELL_PROTOCOL) 时遇到了一些麻烦。我的编译器说它是未定义的。我应该包括一些东西吗?我已经包含了 efi.h
和 efilib.h
。我还需要更多吗?
我试过的代码:
EFI_SHELL_PROTOCOL shell;
我得到的错误:
error: unknown type name ‘EFI_SHELL_PROTOCOL’; did you mean ‘EFI_OPEN_PROTOCOL’?
161 | EFI_SHELL_PROTOCOL shell;
EFI_SHELL_PROTOCOL 不是主 UEFI 接口的一部分,因此不包含在主头文件中(例如 efi.h
),也不包含在主 UEFI 标准中。
相反,EFI_SHELL_PROTOCOL 只是一个可选的扩展(可能不存在,我认为只有在使用并提供 shell 时才可能存在),其拥有独立的标准和独立的头文件。
假设您使用的是 GNU 的工具;要包含的正确文件可能是 efishellintf.h
和 efishellparm.h
.
目前,GNU-EFI 不支持 EFI_SHELL_PROTOCOL。它不包含任何关于它的相关定义。
如果你想和GNU-EFI一起使用,你可以使用this header file from edk2(放在inc
文件夹中,例如inc/efishell.h
)。然后在 inc/efi.h
中包含此头文件并添加以下行:
lib/data.c
:
EFI_GUID ShellProtocol = EFI_SHELL_PROTOCOL_GUID;
inc/efilib.h
:
extern EFI_GUID ShellProtocol;
重建您的 GNU-EFI,现在您可以通过先找到它来使用 EFI_SHELL_PROTOCOL。
EFI_SHELL_PROTOCOL *SP;
uefi_call_wrapper(BS->LocateProtocol, 3, &ShellProtocol, NULL, &SP);
EFI_SHELL_PROTOCOL 完整记录在 UEFI Shell 规范(当前为 v2.2)中,可在 https://uefi.org/specifications
下载
GNU EFI 当前未实现 EFI_SHELL_PROTOCOL,或者实际上,当前的所有 UEFI 规范。有关 UEFI Shell 规范的参考实现,请查看 EDK11 ShellPkg 源代码。
我使用 GNU-EFI 开发 UEFI 应用程序。我在获取在 GNU-EFI 下工作的协议 (EFI_SHELL_PROTOCOL) 时遇到了一些麻烦。我的编译器说它是未定义的。我应该包括一些东西吗?我已经包含了 efi.h
和 efilib.h
。我还需要更多吗?
我试过的代码:
EFI_SHELL_PROTOCOL shell;
我得到的错误:
error: unknown type name ‘EFI_SHELL_PROTOCOL’; did you mean ‘EFI_OPEN_PROTOCOL’?
161 | EFI_SHELL_PROTOCOL shell;
EFI_SHELL_PROTOCOL 不是主 UEFI 接口的一部分,因此不包含在主头文件中(例如 efi.h
),也不包含在主 UEFI 标准中。
相反,EFI_SHELL_PROTOCOL 只是一个可选的扩展(可能不存在,我认为只有在使用并提供 shell 时才可能存在),其拥有独立的标准和独立的头文件。
假设您使用的是 GNU 的工具;要包含的正确文件可能是 efishellintf.h
和 efishellparm.h
.
目前,GNU-EFI 不支持 EFI_SHELL_PROTOCOL。它不包含任何关于它的相关定义。
如果你想和GNU-EFI一起使用,你可以使用this header file from edk2(放在inc
文件夹中,例如inc/efishell.h
)。然后在 inc/efi.h
中包含此头文件并添加以下行:
lib/data.c
:
EFI_GUID ShellProtocol = EFI_SHELL_PROTOCOL_GUID;
inc/efilib.h
:
extern EFI_GUID ShellProtocol;
重建您的 GNU-EFI,现在您可以通过先找到它来使用 EFI_SHELL_PROTOCOL。
EFI_SHELL_PROTOCOL *SP;
uefi_call_wrapper(BS->LocateProtocol, 3, &ShellProtocol, NULL, &SP);
EFI_SHELL_PROTOCOL 完整记录在 UEFI Shell 规范(当前为 v2.2)中,可在 https://uefi.org/specifications
下载GNU EFI 当前未实现 EFI_SHELL_PROTOCOL,或者实际上,当前的所有 UEFI 规范。有关 UEFI Shell 规范的参考实现,请查看 EDK11 ShellPkg 源代码。