Как связать объектный файл с драйвером 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