歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> 搭建UEFI開發環境/編譯uefi shell/編譯disk tool

搭建UEFI開發環境/編譯uefi shell/編譯disk tool

日期:2017/2/28 15:44:51   编辑:SHELL編程
安裝開發包階段: 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,
Copyright © Linux教程網 All Rights Reserved