4

我正在寻找有关如何使用 Visual Studio 2012 项目使用 EDK2 SDK 构建 UEFI 驱动程序的建议。我正在尝试静态链接 UefiLib.lib 但失败得很惨。我已将 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 中,但是它不是作为导出或导入存在,而是作为存档成员存在。我不确定这是否是问题所在。

4

1 回答 1

4

您不能单独构建 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 实用程序使用更高级的命令行开关来进一步调整构建过程 - 您必须研究 TianoCore.org 上提供的 EDK2 手册。

上述步骤应该可以帮助您开始在 Visual Studio 中构建 UEFI 应用程序/驱动程序,但您可能希望使用 Visual Studio 来获得其强大的 IntelliSense 和调试功能。为此,您应该从构建 Nt32Pkg 程序包开始,它会在 Windows 中创建 EFI 模拟环境,并允许您单步调试代码并将 UEFI 驱动程序/应用程序作为常规 Windows 应用程序进行调试。设置一个 Visual Studio 项目来执行此操作有点棘手,除非您使用专门的 VS 扩展进行 UEFI 开发,为您自动完成所有这些工作,例如 Phoenix Core Architect。但是,也可以手动进行,您只需手动将 EDK2 源的部分或全部文件/文件夹结构带入 VS 解决方案资源管理器。Nt32Pkg 构建的结果是 Windows 应用程序 C:

于 2014-02-27T23:47:15.557 回答