首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让协议在GNU-EFI下工作?

如何让协议在GNU-EFI下工作?
EN

Stack Overflow用户
提问于 2020-11-10 01:39:33
回答 3查看 212关注 0票数 0

我使用GNU-EFI开发UEFI应用程序。在GNU-EFI下运行协议(EFI_SHELL_PROTOCOL)时,我遇到了一些问题。我的编译器说它是未定义的。我应该包括一些东西吗?我已经包括了efi.hefilib.h。我还需要更多吗?

我尝试过的代码:

代码语言:javascript
复制
EFI_SHELL_PROTOCOL shell;

我得到的错误是:

代码语言:javascript
复制
error: unknown type name ‘EFI_SHELL_PROTOCOL’; did you mean ‘EFI_OPEN_PROTOCOL’?
  161 |  EFI_SHELL_PROTOCOL shell;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-10 05:22:12

EFI_SHELL_PROTOCOL不是UEFI主接口的一部分,因此不包含在主头文件(例如efi.h)中,也不包含在UEFI主标准中。

相反,EFI_SHELL_PROTOCOL只是一个可选的扩展(可能不存在,我假设只有在使用并提供shell时才可能存在),它有自己的独立标准和独立的头文件。

假设您正在使用GNU的工具;要包含的正确文件可能是efishellintf.hefishellparm.h

票数 1
EN

Stack Overflow用户

发布于 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

代码语言:javascript
复制
EFI_GUID ShellProtocol = EFI_SHELL_PROTOCOL_GUID;

inc/efilib.h

代码语言:javascript
复制
extern EFI_GUID ShellProtocol;

重新构建您的GNU-EFI,现在您可以通过首先定位EFI_SHELL_PROTOCOL来使用它。

代码语言:javascript
复制
EFI_SHELL_PROTOCOL *SP;

uefi_call_wrapper(BS->LocateProtocol, 3, &ShellProtocol, NULL, &SP);
票数 1
EN

Stack Overflow用户

发布于 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源代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64756549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档