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

2023-11-24

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

我的要求是,

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

Example,

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

编辑:我正在寻找类似的东西system("command");Linux 中的函数.

如何实现这一目标?


可以使用以下命令从 UEFI 应用程序调用 UEFI shell 命令EFI_SHELL_EXECUTE的函数EFI_SHELL_PROTOCOL,定义如下MdePkg/Include/Protocol/Shell.h.

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

[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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 UEFI 应用程序内部运行 UEFI shell 命令 的相关文章

  • Linux 上 的默认键绑定是什么? Mac 将此绑定到命令

    Vim 的一些示例设置 例如janus https github com carlhuda janus 将命令键绑定到某些命令 例如 Command Shift F for Ack map
  • 如何将 bash 脚本的整个输出保存到文件

    我正在尝试将 bash 脚本的整个输出保存到文件中 我目前在代码开头有一个参数 ip 地址 如下所示 bin bash USAGE Usage 0
  • 如何使用 bash 显示具有两个子文件夹的文件夹?

    我通过 Cygwin 使用 bash 我有一个大文件夹 a 有很多子文件夹 b 这些子文件夹各有一个或两个子文件夹 c 我想找到所有有两个子文件夹 c 的子文件夹 b 并输出它们 结构如下 a b1 c1 b2 c1 c2 b3 c1 c2
  • 如何使用我在 github 中发布的 bash 脚本执行 chsh?

    我有一个要点 我总是用它来在新服务器上安装我需要的软件包 http gist github com 4372049 http gist github com 4372049 我需要做的就是通过 ssh 在新服务器中输入以下内容 bash c
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 有一种简单的方法可以忽略时间戳来区分日志文件吗?

    我需要比较两个日志文件 但忽略每行的时间戳部分 确切地说是前 12 个字符 有没有一个好的工具 或者一个聪明的 awk 命令 可以帮助我 根据您使用的 shell 您可以改变方法 Blair https stackoverflow com
  • 在 bash 中使用单个命令为 shell 变量分配默认值

    我对 bash 3 00 shell 脚本中的变量进行了大量测试 如果未设置变量 则它会分配默认值 例如 if z VARIABLE then FOO default else FOO VARIABLE fi 我似乎记得有一些语法可以在一行
  • 将文件从不同目录复制到公共目录

    我有很多目录 其中包含 c文件 我想复制全部 c使用 shell 脚本将不同目录中的文件复制到单个目录 find name c exec cp t tmp 启动当前目录中的所有项目 递归 获取名称结尾的项目 c 将这些项目复制到 tmp 如
  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • shell脚本中的\r字符

    我在尝试执行 shell 脚本时收到以下错误 r command not found line 2 请提出同样的解决方案 以下是脚本中使用的初始行 bin sh if lt 1 then echo ERROR Environment arg
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • Android Root 执行 su 带参数

    我在使用参数执行 su 时遇到问题 包含空格 我的 Command java 看起来像这样 public class Command Process process public String executeCommand String c
  • OSX bash 最小化窗口

    在 Mac 中并使用 bash shell 我想执行一个包含单个命令 启动 Jupyter Lab 的文件并立即最小化终端窗口 有没有办法在不安装第三方软件的情况下做到这一点 是的 只需使用osascript https ss64 com
  • 使用 find 命令搜索直到第一个匹配项

    我只需要搜索可以在任何地方的特定目录有没有办法运行此命令直到第一个匹配 谢谢 我现在使用 find noleaf name experiment type d wc l 正如鲁道夫 米尔鲍尔 Rudolf M hlbauer 所提到的 qu
  • 从 shell 命令调用 SOAP 请求

    我使用curl 向Web 服务发送SOAP 请求 并使用shell 脚本获取响应 请在下面找到我正在使用的命令 curl H Content Type text xml charset utf 8 H SOAPAction d sample
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 如何在 PHP 中运行 shell 脚本?

    我正在尝试使用 PHP 触发 shell 脚本的运行 本质上 当用户在我们用 PHP 编写的网站上完成一个操作时 我们希望触发一个 shell 脚本 该脚本本身调用一个 Java 文件 提前致谢 See shell exec http ph

随机推荐

  • 我应该将时区与 Postgres 和 JDBC 的时间戳分开存储吗?

    看起来 也许我是错的 如果你想保留 JDBC 和 Postgres 发生问题时的时区 你需要将时区与时间戳分开存储 也就是说我更愿意给我的 ORM JDBC JPA 一个 JavaCalendar 或乔达DataTime 与说时区Ameri
  • 动态创建的文本框的 JavaScript 验证

    在表单中 通过单击 添加 按钮动态创建文本框 以便在新行中创建文本框 现在我的问题是动态创建的文本框的验证 以便如果有任何文本框 它会显示一条消息单击 提交 按钮提交表单时留空 请帮助我 EDIT
  • Python Plotly - 对齐散点图和条形图的 Y 轴

    我正在尝试使用散点图和图形元素创建一个绘图图 一切都很顺利 但有一个问题 两个 Y 轴没有围绕 0 对齐 我尝试过使用不同的属性 例如 mirror 和tick0 我也尝试遵循plotly网站上的示例 但它主要是具有相同图形类型的多个y轴
  • 在数据重新加载时保存 WPF TreeView 状态

    我正在使用 TreeView 在 UI 中显示我的数据 现在 我的应用程序每 5 秒刷新一次 以便显示最新的数据 有没有办法即使在窗口重新加载后也可以保存树视图的展开状态或折叠状态 因为如果我有大量数据并且需要超过 5 秒才能转到所需数据
  • 如何在 Blazor 组件上进行双向绑定

    我想创建自定义输入 所以我创建了这个组件 MyInputComponent razor div div
  • jquery历史记录插件

    我正在使用这个插件 http plugins jquery com project history 在本页面 http www crtaci info index php autocom majice 我不知道为什么 但似乎我不知道该怎么做
  • 如何关闭额外的日志记录?

    我有一个使用 Spring 和 CXF 的 Java 服务 该代码来自以前的开发人员 我正在提供维护 但我在日志中看到了这一点 Apr 16 2013 1 44 11 PM org apache cxf interceptor Abstra
  • 如何让 Winston 使用 Webpack?

    我有一个使用 Node js 的电子应用程序 我想使用 Winston 登录应用程序 我已将winston 添加到我的package json 文件中 但是当我运行webpack 的构建命令时 我收到了winston 中colors js
  • 使用 ctypes 模块从 python 调用的共享库捕获打印输出

    我正在使用一个通过 ctypes 模块调用的共享库 我想将与此模块关联的标准输出重定向到我可以在程序中访问的变量或文件 然而 ctypes 使用与 sys stdout 不同的标准输出 我将演示我在使用 libc 时遇到的问题 如果有人复制
  • 如何检查日期时间是否在中午之前

    我在 python 中有一个日期时间对象 我想创建一个函数来检查输入是在日期时间当天的上午还是下午 即中午 12 点之前或之后 如何手动创建时间12 00我可以为此使用大于或小于符号吗 lt gt 致电datetime datetime t
  • 在 SQL Server 中迭代 XML 变量

    我在存储过程 SQL Server 2008 中有一个 XML 变量 其示例值为
  • Android 4.0 (API 14+) 中 Activity 之间的默认转换是什么

    我构建了一个包含相当多活动的应用程序 我希望在它们之间实现 进入时从右滑动 退出时从左滑动 转换 我不止一次地读到幻灯片过渡应该是 Android 默认设置 但在我正在开发的设备上 过渡默认是淡入 淡出 Galaxy Tab 2 7 在 I
  • 对 OpenSSL 非阻塞 I/O 感到困惑

    一般来说 OpenSSL 库 C API 似乎提供了两种方法来做所有事情 您可以使用根据您的喜好配置的普通系统套接字 或者您可以使用 OpenSSLBIO有点像流的对象 然而 我经常对一些重复的功能感到困惑 例如 如何使 SSL 连接非阻塞
  • WCF .NET Core - WsHttpBinding 配置project.json

    如何使用 NET core配置wsHttpBinding 我应该在Project json文件中配置吗 在 NET Core之前的配置如下
  • Fortran 中的特定双精度函数有用吗?

    我注意到使用 gfortrantan函数返回与其参数相同类型的实值 例如一个人可以通过real kind 4 real kind 8 or real kind 16 并得到结果real kind 4 real kind 8 or real
  • 在 C 语言中编译时评估的预处理器函数

    我想编写在以下位置评估的预处理器函数 数组 编译时间 例如 如果我定义 define MYARR 5 4 3 2 1 0 然后 代码 int x R 0 应表示为 int x 5 给编译器 当然索引中只能使用文字 如果代码大小 内存很关键并
  • 如何控制 Ember.js 在何处附加渲染的应用程序模板?

    我正在尝试将我的 Ember 应用程序切换为使用 Ember Router 但在附加应用程序模板的位置上遇到问题 当我调用 App initialize 时 它会在文档末尾呈现模板 有没有办法指定渲染的应用程序模板附加到的位置 我的应用程序
  • 关闭WinAPI HANDLE的正确方法(避免重复关闭)

    我有一些句柄 我需要关闭它 代码中的某些地方可能会关闭句柄 那么 这是关闭句柄的正确方法吗 HANDLE h if h INVALID HANDLE VALUE CloseHandle h h INVALID HANDLE VALUE 关于
  • 如何在 AVD 4.2 中启用多用户支持

    有没有办法在 Android 4 2 ADT 版本 21 的新 模拟器 AVD 中启用多用户支持 在真实设备上 设置 中应该有 用户 菜单项 但在我的 AVD 上缺少 我知道此功能仅针对某些平板电脑设备启用 但在新的设备定义部分中创建 AV
  • 从 UEFI 应用程序内部运行 UEFI shell 命令

    我是 UEFI 应用程序开发新手 我的要求是 我需要从 UEFI 应用程序运行 UEFI shell 命令 app efi 源代码 需要指导我如何做到这一点 Example cpUEFI shell 中的命令用于将文件从一个路径复制到 其他