首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从UEFI应用程序内部运行UEFI命令

从UEFI应用程序内部运行UEFI命令
EN

Stack Overflow用户
提问于 2016-08-03 08:53:58
回答 1查看 4.5K关注 0票数 9

我是UEFI应用程序开发的新手。

我的要求是,

我需要从我的UEFI应用程序(app.efi)源代码中运行UEFI命令。需要指导我如何做到这一点。

例如,

UEFI中的cp命令用于将文件从一个路径复制到另一个路径。我希望在我的应用程序(app.efi)源代码中以编程方式这样做。

编辑:我正在寻找类似于 function in Linux的东西。

如何做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 19:12:54

可以使用EFI_SHELL_PROTOCOLEFI_SHELL_PROTOCOL函数从UEFI应用程序调用UEFI命令,该函数在MdePkg/Include/Protocol/Shell.h下定义。

您需要在UEFI应用程序的inf文件中包含协议GUID:

代码语言:javascript
复制
[Protocols]
  gEfiShellProtocolGuid                  ## CONSUMES

然后,您可以调用一个shell命令,如下例所示:

代码语言:javascript
复制
EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE                            ImageHandle,
  IN EFI_SYSTEM_TABLE                      *SystemTable
  )
{
  EFI_SHELL_PROTOCOL    *EfiShellProtocol;
  EFI_STATUS            Status;

  Status = gBS->LocateProtocol (&gEfiShellProtocolGuid,
                                NULL,
                                (VOID **) &EfiShellProtocol);

  if (EFI_ERROR (Status)) {
    return Status; 
  }

  EfiShellProtocol->Execute (&ImageHandle,
                             L"echo Hello World!",
                             NULL,
                             &Status);

  return Status;
}

编辑:使用ShellLib库类有一种更简单(也可能更正确)的方法:

代码语言:javascript
复制
#include <Library/ShellLib.h>

EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE                            ImageHandle,
  IN EFI_SYSTEM_TABLE                      *SystemTable
  )
{
  EFI_STATUS            Status;

  ShellExecute (&ImageHandle,
                L"echo Hello World!",
                FALSE,
                NULL,
                &Status);

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

https://stackoverflow.com/questions/38738862

复制
相关文章

相似问题

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