Скомпилируйте приложение / драйвер UEFI, используя EDK2 - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь создать приложение / драйвер для UEFI, который запустит сценарий оболочки UEFI.Я использую UDK2018 с Visual Studio 2017. Я правильно собрал все инструменты, я могу запустить SecMain, которая запускает оболочку UEFI, и я уже протестировал следующие сценарии:

В файле startup.nsh:

fs0:
echo -off
vol0
vol1
fs1:
vol0
vol1

In vol0:

vol > base.txt

In vol1:

vol > output.txt
comp base.txt output.txt

Моя цель - проверить, были ли внесены какие-либо изменения в систему UEFI.Почему я предпочитаю, чтобы это делалось приложением / драйвером?Я нашел где-то в документации этот скриншот.Возможно я ошибаюсь, но из Shell я не могу загрузить операционную систему.Я имею в виду, автоматически, потому что приложение / драйвер Uefi работает в UEFI Services, верно?Он будет выполнен, а затем передаст управление некоторому загрузочному механизму, который запускает ОС.

Что у меня есть на данный момент: C:\MyWorkspace с файлами EDK2

C:\MyWorkspace\source, где я создал драйвер дляАрхитектура IA32 с использованием мастера драйверов UEFI

C:\Users\username\source\repos\BootCheck с Makefile Project, со следующими настройками: Отладка и NMake .Затем я включаю BootCheck.c из C:\MyWorkspace\source

Мне, вероятно, нужно добавить несколько строк кода в файлы .dec или .dsc в папках MdePkg или Nt32Pkg, не знаю, я заблудился.Буду признателен за пошаговое руководство или любую полезную информацию, спасибо.

@@@

Извините за неясный вопрос.Позвольте мне использовать этот вопрос в качестве примера: Запустите команду оболочки UEFI из приложения UEFI и ответ @Yaniv Levinsky.Я хочу сделать то же самое, но когда я пытаюсь включить C:\MyWorkspace\ShellPkg\Include\Library\ShellLib.h, я получаю такие ошибки:

1>Building ... c:\myworkspace\MdeModulePkg\Library\CustomizedDisplayLib\CustomizedDisplayLib.inf [IA32]
1>C:\MyWorkspace\ShellPkg\Include\Library\ShellLib.h(22): fatal error C1083: Cannot open include file: 'Protocol/EfiShellInterface.h': No such file or directory
1>NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86\cl.exe"' : return code '0x2'

Если я попробую первый метод:

EFI_STATUS
EFIAPI
BootCheckDriverEntryPoint (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
    EFI_SHELL_PROTOCOL    *EfiShellProtocol;
    EFI_STATUS            Status;

    Status = gBS->LocateProtocol(&gEfiShellProtocolGuid,NULL,(VOID **)&EfiShellProtocol);

  //
  // Install UEFI Driver Model protocol(s).
  //

  Status = EfiLibInstallDriverBindingComponentName2 (
             ImageHandle,
             SystemTable,
             &gBootCheckDriverBinding,
             ImageHandle,
             &gBootCheckComponentName,
             &gBootCheckComponentName2
             );
  ASSERT_EFI_ERROR (Status);

  return Status;
}

Iполучить .. ошибки компоновщика, я полагаю.Я также пытался включить некоторые библиотеки в страницы свойств, но я не очень знаком с проектом Makefile, я мог сделать что-то не так.

1>Building ... c:\myworkspace\MdeModulePkg\Library\FileExplorerLib\FileExplorerLib.inf [IA32]
1>c:\myworkspace\source\BootCheck.c(111): error C2065: 'EFI_SHELL_PROTOCOL': undeclared identifier
1>c:\myworkspace\source\BootCheck.c(111): error C2065: 'EfiShellProtocol': undeclared identifier
1>c:\myworkspace\source\BootCheck.c(111): warning C4552: '*': result of expression not used
1>c:\myworkspace\source\BootCheck.c(114): error C2065: 'EfiShellProtocol': undeclared identifier
...