我如何使用" argc"在efi shell?

时间:2017-03-30 10:06:27

标签: c uefi

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

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

到目前为止编写的代码:

#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]);
 }

1 个答案:

答案 0 :(得分:0)

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)这样的抽象框架可能隐藏了潜在的机制,或提供了替代它们的替代方法。