2014-01-16 145 views
1

我正在尋找關於如何使用Visual Studio 2012項目構建使用EDK2 SDK的UEFI驅動程序的建議。我試圖靜態鏈接UefiLib.lib,但失敗了。我已經將lib添加到鏈接器下的其他依賴項。使用Visual Studio構建UEFI驅動程序

#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 *,...)" ([email protected]@YA_KPEBGZZ) 

現在我已經使用DUMPBIN確保打印在lib存在,但它的存在不是作爲一個出口或進口,但作爲一個archivemember。我不確定這是否是問題。

回答

2

您不能單獨構建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 

如果你想只建你好,你就必須定製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 build的結果是Windows應用程序C:\ src \ edk2 \ Build \ NT32IA32 \ DEBUG_VS2012x86 \ IA32 \ SecMain.exe - 這會讓您在Windows環境中啓動並向您介紹UEFI。

+0

「您不能單獨構建UEFI驅動程序或應用程序,它必須在EDK2源代碼樹內完成」 - 事實並非如此。我正在使用Visual Studio 2015構建UEFI文件系統驅動程序,而不使用EDK2,位於https://github.com/pbatard/efifs。所有你需要的是gnu-efi作爲一個子模塊。 – Akeo

+0

這個問題特別是關於使用EDK2 SDK和VS2012的UEFI驅動程序,所以我在這方面做了回答。如果我們從這個問題的背景中去掉這句話 - 當然,你是對的。你仍然需要一個帶EDK2樹頭文件的環境(在你的情況下是gnu-efi),我自己在這樣的自定義樹中構建了EFI組件。順便說一句,你的EfiFs驅動看起來不像EDK2組件(例如沒有INF文件),並且它不與任何EDK2庫鏈接,如問題中的UefiLib.lib,也不使用EDK2構建工具。 – sun2sirius

+0

啊,我的不好。我認爲OP是在嘗試使用VS構建EFI驅動程序,而不必使用EDK2,並且遇到問題。 – Akeo

相關問題