安裝開發包階段:
1.下載uefi 的開發包EDK http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=EDK,並解壓至指定目錄C:\EDK(可以任意設置).
2.安裝Visual Studio 2005 or 2008
3.安裝WDK(可不安裝,如果你從其他地方找到庫的話,有些uefi程序需要鏈接到WDK庫,像EfiDiskUtility程序的efifmt就需要連接int64.lib).
4.
配置開發環境:
1.修改環境config.env,如果不修改會有很大不可知的錯誤,如NMAKE : fatal error U1077: 'C:\WINDDK\3790.1830\bin\win64\x86\amd64\lib' : return 02
修改前:
USE_VC8 = NO
USE_VC8_X64 = NO
修改後:USE_VC8 = YES
USE_VC8_X64 = YES
2.設置環境變量:
在command prompt 下key入:
set EDK_SOURCE=C:\edk
set WIN_DDK_PATH=C:\WinDDK\7600 ===>使用WDK6000的話就設7600(可以不設置,如果不需要連接WDK庫文件的話).
開始build,以X64舉例:
1.開始build,啟動VS2008 命令行:
VS2008快捷方式如下:%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86
2.EDK 可以產生多種環境,我們只需build平台x64: cd C:\EDK\Sample\Platform\X64\Build
3.nmake(如果是IA32,nmake run就可以啟動32位shell模擬器).
build shell和EfiDiskUtility,特別是後者需要關聯庫比較多:
1.修改x64.dsc文件,該文件類似VC中的解決方案.sln文件,能把很大項目結合起來.
[Libraries.Platform]
# Added by 2012-7-12 for compiling shell and disk tool
#Other\Maintained\Application\Shell\Shell.inf
Other\Maintained\Application\Shell\ShellFull.inf
Other\Maintained\Application\Shell\Library\EfiShellLib.inf
Other\Maintained\Application\EfiDiskUtility\efilib\efilib.inf
Other\Maintained\Application\EfiDiskUtility\diskpart\diskpart.inf
Other\Maintained\Application\EfiDiskUtility\efichk\efichk.inf
Other\Maintained\Application\EfiDiskUtility\efifmt\efifmt.inf
#Sample\Application\EfiDiskUtility\diskpart\diskpart.inf
#Sample\Application\EfiDiskUtility\efilib\efilib.inf
一定要在Libraries.Platform section下面,否則有FILE_GUID沒有定義等多處錯誤,一般每個inf文件都會定義一個FILE_GUID,uefi程序通過GUID去定位.
2.復制int64.lib到EfiDiskUtility\efilib\.
3.修改EfiDiskUtility的多處編譯錯誤.
4.nmake
5.看結果排錯,即使build成功,但是經常會暴錯誤,暫時沒發現影響正常功能.
orm\X64\Build\X64\Other\Maintained\Application\Shell -P1 -V
GenFfsFile : error E0000: -V : can't open input file
6.在C:\EDK\Sample\Platform\X64\Build\X64目錄下會有編譯的efi文件.
Tip:仔細看EfiDiskUtility下面幾個目錄,發覺diskpart下面有inf文件,inf文件包含source依賴,而efilib下面的inf文件什麼都不包含只說明type 是makefile,那到底其怎麼編譯的呢?未編譯成功之前我一直被納悶,其實對makefile機制有所了解的人可以深究下去,以這個庫未入手點,應該能找到uefi編譯環境的精髓.
單獨編譯某個module,如,在UDK環境下可以直接運行build -p Nt32Pkg\Nt32Pkg.dsc -a IA32 -m MdeModulePkg\Application\HelloWorld\HelloWorld.inf,