UEFI快速上手:如何用VS調試NT32模擬環境
很多人愛好者都想嘗試學習UEFI,無奈沒有硬體,也沒有調試環境。其實NT32是個很好的模擬環境,大家可以在windows上利用熟悉的Visual Studio來編譯,調試UEFI內核,driver和app。
編譯環境準備
我們閑話休提,開始動手吧。
1.下載源程序
A.下載最新的EDKII code tianocore/edk2
用git下載。如果你對git不熟或者想快速上手。可以直接下載zip包,如圖:
解壓zip或是git下載到本地目錄,譬如放在V:edk2-master。
B.下載EDKII的 basetools:tianocore/edk2-BaseTools-win32
也可以下載zip或git方式。完成後解壓,將其目錄改名叫做win32。copy到V:edk2-masterBaseToolsBin目錄下。
2.安裝nasm
這裡下載
NASM
可以安裝在任何目錄,譬如C:NASM。安裝後需要設置環境變數,將安裝目錄加入Path環境變數。我們已最常見的Win7為例,設置如下圖:
3.安裝VS
本篇以Visual Studio2008為例,請安裝VS2008。
編譯調試
1.建立工程
A. 打開Visual Studio 2008, 文件-->新建-->從現有代碼創建項目。
B. 默認是VC++,點擊下一步
C. 工程位置選擇V:edk2-master,項目名字這裡叫NT32,文件類型加入EDKII的*.fdf;*.dsc;*.dec;*.inf;*.uni。選擇下一步
D. 選擇使用外部 build系統,如圖:
選擇下一步。
E. 在V:edk2-master下創建VSbuild.bat,其中輸入:
call edksetup.bat --nt32nbuild %1n
存儲後,在「生成命令行」中,填寫:VSbuild.bat;在「重新生成命令行」中,填寫:VSbuild.bat all;在「清除命令行」中,填寫:VSbuild.bat clean,並點擊下一步。
F. VS開始添加文件,需要一定時間。等待文件全部添加完畢,我們要為VS環境做些小改動:在v:edk2-masternt32pkgincludecommonWinNTInclude.h
加入這樣一行:
#pragma warning(disable : 4005)n
這是為了消除VS環境下build的重複定義錯誤。用VS Command Prompt則不需要這一步。
G. 現在UEFI/EDKII所有的程序都導入到VS里了,你可以利用VS的強大功能編輯他們了!
2.編譯和調試
A. 我們可以開始build了。按下F7或者選擇build。一切順利Image就會生成在V:edk2-masterBuildNT32IA32DEBUG_MYTOOLSIA32 SecMain.exe生成。
B. 右鍵點擊NT32工程,選擇屬性。按照下圖將工程Debugging選項設置好,注意黃色劃線部分,Command直接選擇生成的SecMain.exe,工作目錄也要在那個目錄:
設置完畢,我們可以試試加個斷點,這裡我們就在我們字模那節介紹的GraphicConsole.c中加個斷點:
我們選擇Debug下的調試,或者直接按F5,程序順利運行,不一會就到了斷點:
C. 以上是在內核中,如果想在Shell下的app裡面加斷點,譬如在Helloworld內,可以內嵌入
_asm int 3;
其他一切照舊,按下F5,在shell內輸入HelloWorld,會彈出
選擇break即可停在int3的位置。
結語
如果你安裝的是VS2013,步驟十分類似,不過因為NT32預設是MYTOOLS的工具鏈,也就是VS2008,你需要在target.txt中將MYTOOLS替換成VS2013。
通過以上方法,我們可以像調試一般windows應用程序一樣用熟悉的VS調試UEFI內核。在建立工程時批量引入的的所有源程序也為我們觀看,處理UEFI程序帶來了方便。快來一起調戲UEFI內核吧!
歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!
推薦閱讀: