Сборка драйвера UEFI с использованием Visual Studio

Я ищу совет о том, как создавать драйверы UEFI с помощью EDK2 SDK с использованием проекта Visual Studio 2012. Я пытаюсь статически связать UefiLib.lib, но безуспешно. Я добавил библиотеку к дополнительным зависимостям под компоновщиком.

#include  <Uefi.h>
#include  <Library/UefiLib.h>

EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
 Print((CHAR16 *)L"Welcome to the world of EDK II.\n");
 return EFI_SUCCESS;
}

Ошибка

test.obj : error LNK2001: unresolved external symbol "unsigned __int64 __cdecl Print(unsigned short const *,...)" (?Print@@YA_KPEBGZZ)

Теперь я использовал DUMPBIN, чтобы убедиться, что Print существует в lib, однако он существует не как экспорт или импорт, а как участник архива. Я не уверен, в этом ли проблема.

1 ответ

Вы не можете создать драйвер или приложение UEFI отдельно, это должно быть сделано в дереве исходного кода EDK2, в котором есть много заголовочных файлов и библиотек, необходимых для компиляции и компоновки компонента EDK2. Компоненты EDK2 должны быть собраны с помощью инструментов сборки EDK2, компилятор / компоновщик C - это только шаг в процессе сборки EDK2. Вам следует начать со сборки с использованием командной строки, чтобы убедиться, что вы правильно настроили среду, а затем попытаться перенести компоненты, которые вы хотите разработать, в Visual Studio.

В Visual Studio вы можете начать с создания проекта Makefile - это необходимо для указания всех пользовательских шагов сборки. Например, перейдите на страницы свойств вашего проекта в разделе Свойства конфигурации -> NMake -> Общие -> Командная строка сборки. Поместите следующий код в командную строку сборки; это позволит вам собрать весь пакет AppPkg, который включает в себя приложение Hello, которое вы пытаетесь собрать.

cd C:\src\edk2
call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86
call edksetup.bat
build.exe -p c:\src\edk2\AppPkg\AppPkg.dsc -t VS2012x86  -b DEBUG

Если вы хотите собрать только Hello, вам нужно настроить файл AppPkg.dsc, который используется для сборки пакета AppPkg. Существуют способы дальнейшей настройки процесса сборки с помощью более сложных ключей командной строки с помощью утилиты build.exe - вам придется изучить руководства по EDK2, доступные на TianoCore.org.

Вышеупомянутые шаги должны помочь вам начать создавать приложение / драйвер UEFI в Visual Studio, но вы, вероятно, захотите использовать Visual Studio для его мощных функций IntelliSense и отладки. Для этого вам следует начать с создания пакета Nt32Pkg, который создает эмулируемую среду EFI в Windows и позволяет пошагово выполнять код и отлаживать драйвер / приложение UEFI как обычное приложение Windows. Настроить для этого проект Visual Studio немного сложно, если только вы не используете специализированное расширение VS для разработки UEFI, которое автоматизирует всю эту работу для вас, например, Phoenix Core Architect. Однако это можно сделать вручную, вам просто нужно перенести часть или всю структуру файлов / папок источника EDK2 в VS Solution Explorer вручную. Результатом сборки Nt32Pkg является приложение Windows C:\src\edk2\Build\NT32IA32\DEBUG_VS2012x86\IA32\SecMain.exe - которое должно помочь вам начать работу в среде Windows и познакомить вас с UEFI.

Другие вопросы по тегам