Как связать объектный файл с драйвером UEFI DXE/EFI?

Я создаю драйвер UEFI DXE/EFI (UDK2018) (в Windows, используя VS2017), в который мне нужно связать существующий объект (.obj) файл. Я почти уверен, что это нужно делать из файла INF, но я не вижу ничего конкретного о включении объектного файла в документацию EDK2. Я нашел эти два примера для справки:

https://github.com/tianocore/edk2/blob/UDK2018/StdLib/LibC/LibC.inf

[Binaries.X64]
LIB|Twofish_x64.obj|*
LIB|Camellia_aesni_x64.obj|*
LIB|Camellia_x64.obj|*

https://github.com/veracrypt/VeraCrypt-DCS/blob/master/Library/VeraCryptLib/VeraCryptLib.inf

[Binaries.IA32]
  LIB|Main/Ia32/ftol2.obj|*|MSFT

Однако даже с их использованием в качестве справки (которая, как я полагаю, работает), я не могу понять, как правильно настроить файл INF, чтобы получитьobject_files.lst включить .obj. (Фактическая ошибка, конечно же, является неразрешенной внешней. - Я проверил, что если я вручную добавлю.obj файл в object_files.lst, ссылка на .efi драйвер успешно.)

Без .obj, мой INF выглядит так:

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = SampleDxe
  FILE_GUID                      = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = SampleDxe_Main

[Sources]
  SampleDXE.c
  SampleDXE.h
  SampleProtocol.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  UefiBootServicesTableLib
  MemoryAllocationLib
  UefiDriverEntryPoint
  BaseMemoryLib
  UefiLib
  DebugLib
  BaseLib
  PcdLib
  DevicePathLib

[Depex]
  TRUE

Я пробовал вставить следующие разделы между [Sources] а также [Packages] разделы безуспешно:

[Binaries]
  LIB|path/to/my/file.obj|*|MSFT
[Binaries.X64]
  LIB|path/to/my/file.obj|*|MSFT
[Binaries]
  LIB|path/to/my/file.obj|*
[Binaries.X64]
  LIB|path/to/my/file.obj|*
[Binaries]
  LIB|path/to/my/file.obj
[Binaries.X64]
  LIB|path/to/my/file.obj

(.obj размещены с исходными файлами)

[Binaries]
  LIB|file.obj|*|MSFT
[Binaries.X64]
  LIB|file.obj|*|MSFT
[Binaries]
  LIB|file.obj|*
[Binaries.X64]
  LIB|file.obj|*
[Binaries]
  LIB|file.obj
[Binaries.X64]
  LIB|file.obj

Я также изменил INF_VERSION на более поздние версии (0x0001001A, 1.25 и т. Д.), Хотя и не во всех комбинациях приведенных выше разделов.

Я также считаю, что могу создать промежуточный .libфайл, но если я собираюсь это сделать, есть другие, более прямые варианты, которые имеют смысл в моем случае. Использование автономного объектного файла было бы предпочтительнее, проще и лучше согласовывалось бы с другими частями более крупного проекта, и приведенные выше примеры, кажется, показывают, что это должно быть возможно.

Может ли кто-нибудь сказать мне, как я могу получить уже существующий объектный файл для ссылки на DXE / EFI (предположительно, добавив его в object_files.lst)?

1 ответ

Решение

Что ж, я должен был подумать, что после нескольких дней попыток ответ появится сразу после того, как я разместил этот вопрос... и это произошло.

Сначала меня направили на значение по умолчанию EDK\Conf\build_rule.txt файл, и просматривая его, я нашел правило сборки для .obj файлы (а также .oфайлы)! Это было очень похоже на обычную копию (ну, фактически добавив ее в тот же список, что и вывод.c/.cpp/.asm/так далее. файлов), поэтому было предложено попробовать разместить.obj файл в [Sources]раздел. Я такого нигде не видел, поэтому попробовал, и, конечно же, это сработало:

[Sources]
  SampleDXE.c
  SampleDXE.h
  SampleProtocol.h
  path/to/my/file.obj
Другие вопросы по тегам