Запустите команду оболочки UEFI из приложения UEFI

Я новичок в разработке приложений UEFI.

Мое требование заключается в том,

Мне нужно запустить команду оболочки UEFI из моего приложения UEFI (app.efi) исходный код. Нужно руководство, как я могу это сделать.

Пример,

cp Команда в оболочке UEFI используется для копирования файла из одного пути в другой. Я хочу сделать это программно внутри моего приложения (app.efi) исходный код.

РЕДАКТИРОВАТЬ: я ищу что-то похожее наsystem("command"); функция в Linux.

Как этого добиться?

Ответы на вопрос(2)

Решение Вопроса

льное приложение, но оно может выполнить копию для вас.https://software.intel.com/en-us/articles/uefi-shell Обратите внимание, что синтаксис команды не идентичен bash.

 Daniel Wisehart14 сент. 2016 г., 15:15
Посмотрите эквивалент libc, который у вас есть для среды UEFI. Вы ищете «exec» или «spawn» или одну из эквивалентных функций. Ссылка говорит вам, что вам нужно позвонить для «команды».
 Daniel Wisehart14 сент. 2016 г., 12:33
Посмотрите на ссылку. Есть примеры запуска команд и запуска скриптов.
 Keshava GN14 сент. 2016 г., 13:47
Еще раз спасибо Дэниел. Я проверил ссылку, там написано о командах и скриптах. но я хочу, чтобы команда вызывалась из моего приложения (в коде на C, который я собираю для приложения .efi). Есть идеи? Спасибо
 Keshava GN14 сент. 2016 г., 06:31
Спасибо Даниэль. Под сценарием вы имеете в виду приложение .efi? Потому что я занимаюсь разработкой (разработкой) приложения, и внутри этого приложения мне нужна вышеупомянутая функциональность. (Я новичок в UEFI. Я изучу синтаксис, но подтверждаю, что упомянутый вами метод входит в приложение UEFI, написанное на C)
 Daniel Wisehart14 сент. 2016 г., 05:30
Посмотрите на ссылку, которую я предоставил. Они показывают, как запустить скрипт и как выполнить команду из этого скрипта. Если вы не против установить их продукт и изучить синтаксис, я думаю, он даст вам все, о чем вы просите.
 Keshava GN14 сент. 2016 г., 05:23
Привет, Даниэль, спасибо за ответ, но можешь ли ты объяснить, как я могу выполнить какую-то команду UEFI? Я имею в виду, что в Linux мы будем называть system ("команда arg"); функция из приложения, и это на самом деле будет запускать «аргумент команды» в командной строке Linux. Точно так же я должен сделать на UEFI. Из моего UEFI.efi мне нужно выполнить одну команду оболочки UEFI (пример: «copy src dst»). как я могу этого достичь? Спасибо

ьюEFI_SHELL_EXECUTE функцияEFI_SHELL_PROTOCOL, определенный подMdePkg/Include/Protocol/Shell.h.

Вам нужно включить GUID протокола в inf-файл вашего UEFI-приложения:

[Protocols]
  gEfiShellProtocolGuid                  ## CONSUMES

Затем вы можете вызвать команду оболочки, как в следующем примере:

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

Ваш ответ на вопрос