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

时间:2016-08-03 08:53:58

标签: shell command bootloader uefi

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

我的要求是,

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

实施例,

  UEFI shell中的

cp命令用于将文件从一个路径复制到   另一个。我想在我的应用程序中以编程方式执行此操作   (app.efi)源代码。

编辑:我正在寻找与system("command"); function in Linux类似的东西。

如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

可以使用EFI_SHELL_EXECUTE下定义的EFI_SHELL_PROTOCOL的{​​{1}}函数来从UEFI应用程序调用UEFI Shell命令。

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

MdePkg/Include/Protocol/Shell.h

然后,您可以像以下示例中一样调用shell命令:

[Protocols]
  gEfiShellProtocolGuid                  ## CONSUMES

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

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;
}

答案 1 :(得分:-2)

您是在寻找内置的东西,还是可以使用nshell?它是一个单独的应用程序,但它可以为您执行副本。 https://software.intel.com/en-us/articles/uefi-shell请注意,命令语法与bash不同。