我使用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;发布于 2020-11-10 05:22:12
EFI_SHELL_PROTOCOL不是UEFI主接口的一部分,因此不包含在主头文件(例如efi.h)中,也不包含在UEFI主标准中。
相反,EFI_SHELL_PROTOCOL只是一个可选的扩展(可能不存在,我假设只有在使用并提供shell时才可能存在),它有自己的独立标准和独立的头文件。
假设您正在使用GNU的工具;要包含的正确文件可能是efishellintf.h和efishellparm.h。
发布于 2020-11-10 13:31:00
目前,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);发布于 2020-12-05 12:52:32
在可从https://uefi.org/specifications下载的UEFI Shell规范(当前为v2.2)中完整地记录了EFI_SHELL_PROTOCOL
GNU EFI目前并没有实现EFI_SHELL_PROTOCOL,实际上,也没有实现当前所有的UEFI规范。有关UEFI Shell规范的参考实现,请查看EDK11 ShellPkg源代码。
https://stackoverflow.com/questions/64756549
复制相似问题