运行 来自 UEFI 应用程序内部的 UEFI shell 命令
Run a UEFI shell command from inside UEFI application
我是 UEFI 应用程序开发的新手。
我的要求是,
我需要从我的 UEFI 应用程序 (app.efi
) 源代码中 运行 一个 UEFI shell 命令。
需要有关如何执行此操作的指导。
示例,
cp
command in UEFI shell is used to copy a file from one path to
another. I want to do this programmatically inside my application
(app.efi
) source code.
编辑:我正在寻找类似于 system("command");
function in Linux 的内容。
如何实现?
从 UEFI 应用程序调用 UEFI shell 命令可以使用 EFI_SHELL_PROTOCOL
的 EFI_SHELL_EXECUTE
函数完成,在 MdePkg/Include/Protocol/Shell.h
.
下定义
您需要在 UEFI 应用程序的 inf 文件中包含协议 GUID:
[Protocols]
gEfiShellProtocolGuid ## CONSUMES
然后您可以调用 shell 命令,如下例所示:
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 库有一种更简单(并且可能更正确)的方法 Class:
#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;
}
我是 UEFI 应用程序开发的新手。
我的要求是,
我需要从我的 UEFI 应用程序 (app.efi
) 源代码中 运行 一个 UEFI shell 命令。
需要有关如何执行此操作的指导。
示例,
cp
command in UEFI shell is used to copy a file from one path to another. I want to do this programmatically inside my application (app.efi
) source code.
编辑:我正在寻找类似于 system("command");
function in Linux 的内容。
如何实现?
从 UEFI 应用程序调用 UEFI shell 命令可以使用 EFI_SHELL_PROTOCOL
的 EFI_SHELL_EXECUTE
函数完成,在 MdePkg/Include/Protocol/Shell.h
.
您需要在 UEFI 应用程序的 inf 文件中包含协议 GUID:
[Protocols]
gEfiShellProtocolGuid ## CONSUMES
然后您可以调用 shell 命令,如下例所示:
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 库有一种更简单(并且可能更正确)的方法 Class:
#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;
}