EDK2是UEFI使用比較廣泛的開源實現,支持在多種操作系統平臺下進行開發。爲了開發調試方便,這裏採用在win10下用visual studio進行UEFI的開發。VS號稱地表Top one的IDE,功能強大自不在話下,開發起來往往起到事半功倍的效果。此篇博客我們完成edk2源碼的開發編譯環境的搭建,同時編譯運行一個模擬器,用來測試efi程序。
一、相關工具安裝
首先下載安裝vs2017或者vs2015,安裝組件裏面勾選上“使用C++的桌面開發”這一項。
接着要下載NASM工具,下載後建議安裝到"C:\NASM"目錄下。
最後下載安裝IASL工具,下載後建議安裝到"C:\IASL"目錄下。
安裝完成後,需要配置下環境變量,在Path環境變量裏面添加IASL的安裝路徑,如下圖所示。
還需要創建一個新的環境變量NASM_PREFIX,變量的值設置爲NASM的安裝路徑。
二、編譯basetools
在edk2 github項目主頁上下載edk2的源碼包,通過Win+R -> cmd打開windows下的命令行,cd到edk2的源碼目錄下,輸入如下命令編譯basetools。
edksetup.bat Rebuild
編譯完成後會在 $(edk2-base)\BaseTools\Bin\Win32 目錄下生成一些工具,這個工具會在後續編譯efi工程的時候使用到。
三、config build
接下來需要編譯生成config文件,該文件用於配置後續編譯工程的工具鏈和項目名等信息,輸入如下命令即可。
edksetup.bat
edksetup.bat命令執行完成後,會在 $(edk2-base)\Conf 目錄下生成幾個.txt的文本文件,其中 Conf\target.txt 文件需要更改下TOOL_CHAIN_TAG配置,這個根據自己的VS版本來寫,可以是VS2015/VS2017/VS2019等。
ACTIVE_PLATFORM配置的是默認編譯的工程,EmulatorPkg/EmulatorPkg.dsc是一個模擬器的工程路徑。
TARGET配置的是工程的編譯模式,可以是RELEASE或者DEBUG。
TARGET_ARCH是目標架構,在windows+VS的話可選X64或者IA32。
四、編譯模擬器
有了模擬器,就可以很方便的開發調試EFI驅動/程序,不用每次都把固件燒錄到實體機上FLASH啓動測試那麼麻煩。Conf\target.txt 默認配置的就是EmulatorPkg模擬器的工程,這裏只接用build命令編譯即可。
edk2setup.bat
build
編譯成功後如下圖所示。
編譯完成了,就可以運行模擬器了,我們可以cd到工程的輸出目錄下,運行目標文件。
cd Build\EmulatorIA32\DEBUG_VS2017\IA32\
WinHost.exe
運行WinHost.exe之後,UEFI固件的啓動界面就出來了,可以通過按鍵選擇進入UEFI SHELL或者配置界面進行efi程序的加載測試。
五、調試模擬器
用visual studio打開模擬器工程:$(edk2-base)\EmulatorPkg\Win\VS2017\Win.sln,即可在visual studio軟件中編譯運行UEFI模擬器工程了,也可以在efi應用/驅動上打上斷點,以調試模式運行模擬器工程,即可調試efi應用/驅動,如下圖所示,具體調試開發過程後續慢慢再講。