gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:41:48 27 4
gpt4 key购买 nike

我是 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 的东西.

如何做到这一点?

最佳答案

可以使用 EFI_SHELL_EXECUTE 从 UEFI 应用程序调用 UEFI shell 命令。 EFI_SHELL_PROTOCOL的功能, 在 MdePkg/Include/Protocol/Shell.h 下定义.

您需要在 UEFI 应用程序的 inf 文件中包含协议(protocol) 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 库类有一种更简单(可能更正确)的方法:
#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;
}

关于shell - 从 UEFI 应用程序内部运行 UEFI shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38738862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com