【问题标题】:How do I use "argc" in an efi shell?如何在 efi shell 中使用“argc”?
【发布时间】:2017-08-24 04:33:04
【问题描述】:

目前我正在使用 efi API 进行编程。

如何在 efi 编程中使用? 我想知道如何在efi中写argv和argc。

写到现在的c代码:

#include <stdio.h>
int main(int argc,char *argv[])
{
  int i;
  printf("Program name is %s \n",argv[0]);
  if (argc <2)
     printf("argument is no exist \n");
 else 
   for (i=0;i<argc;i++)
     printf ("argv[%d] = %s \n",i,argv[i]);
 }

【问题讨论】:

  • 什么是“efi”?你展示了如何使用它——你还需要什么?
  • 目前还不清楚您要在这里实现什么。您能否提供您的程序的示例运行、它给您的结果以及您期望的结果?
  • UEFI shell 或 Linux 或 Windows 都没有关系。 argc, argv 是标准的一部分,它可以在任何地方开箱即用。您必须更具体地说明什么对您不起作用?
  • 在c语言中作为文本使用。但是如何在 UEFI SHELL 中使用它呢? C语言和语法不同。
  • 另外,它在VISUAL STUDIO 2015中使用EFI API (edk2)编译,并在UEFI SHELL中作为efi文件运行。

标签: c uefi


【解决方案1】:

argcargvmain 是标准库概念,不直接转化为 UEFI 应用程序。

在一般层面上:

  • UEFI 应用程序仅使用 UEFI 接口
  • UEFI Shell 应用程序也可以依赖 UEFI Shell 提供的接口(但在 shell 之外无法正常运行)

在任何一种情况下,当应用程序启动时,其入口点只会传递一个指向 UEFI 系统表的指针和一个 图像句柄,提供有关如何调用当前图像的信息的链接.

纯 UEFI 应用程序仅在其图像句柄上安装了 EFI_LOADED_IMAGE_PROTOCOL。 UEFI Shell 应用程序也有EFI_SHELL_PARAMETERS_PROTOCOL

EFI_SHELL_PARAMETERS_PROTOCOL 让您可以访问 argc/argv 结构。没有这个,你只能手动解析EFI_LOADED_IMAGE_PROTOCOL.LoadOptions

您可以在 UEFI 规范UEFI Shell 规范中找到这些协议的详细信息,from the UEFI Forum website

当然,像 gnu-efi(也许还有 VisualUefi)这样的抽象框架可能会隐藏底层机制,或者提供获取它们的替代方法。`

【讨论】:

    猜你喜欢
    • 2016-03-21
    • 2021-07-14
    • 2018-08-30
    • 2017-03-28
    • 2019-05-07
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多