Как использовать argc в оболочке efi?

В настоящее время я программирую с помощью efi API.

Как использовать в программировании efi? Я хочу знать, как писать argv и argc в efi.

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

person j.doeq    schedule 30.03.2017    source источник
comment
Что такое эфи? Вы показываете, как им пользоваться - что еще нужно?   -  person Jonathan Leffler    schedule 30.03.2017
comment
Довольно неясно, чего вы пытаетесь достичь здесь. Не могли бы вы предоставить пример запуска вашей программы, результаты, которые она вам дала, и какие результаты вы ожидали?   -  person ymbirtt    schedule 30.03.2017
comment
Неважно, UEFI оболочка это или Linux или Windows. argc, argv является частью стандарта и везде работает «из коробки». Вы должны быть более конкретными, что именно не работает для вас?   -  person Alex    schedule 31.03.2017
comment
Он используется в языке c как текст. Но как его использовать в UEFI SHELL? C Язык и грамматика разные.   -  person j.doeq    schedule 31.03.2017
comment
Кроме того, он компилируется в VISUAL STUDIO 2015 с помощью EFI API (edk2) и запускается как файл efi в UEFI SHELL.   -  person j.doeq    schedule 31.03.2017
comment
Источник примера: github.com/ionescu007/VisualUefi   -  person j.doeq    schedule 31.03.2017
comment
Итак, как вы его запускаете?   -  person Jonathan Leffler    schedule 01.04.2017


Ответы (1)


argc, argv и main являются стандартными понятиями библиотеки и не переводятся напрямую в приложения UEFI.

На общем уровне:

  • Приложения UEFI используют только интерфейсы UEFI.
  • Приложения оболочки UEFI также могут полагаться на интерфейсы, предоставляемые оболочкой UEFI (но не будут корректно работать вне оболочки).

В любом случае, когда приложение запускается, его точке входа будет передан только указатель на системную таблицу 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, с веб-сайта форума UEFI.

Конечно, абстрагирующиеся фреймворки, такие как gnu-efi (и, возможно, VisualUefi), могут скрывать базовую механику или предоставлять альтернативные средства для их получения.

person unixsmurf    schedule 03.04.2017