Я пытаюсь создать приложение / драйвер для 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