需要的軟件包如下
安裝UEFI開發環境EDK2
本文在Windows7x64上測試,安裝Windows SDK作為編譯器
- 安裝.Net Framework 4
- 安裝Windows SDK v7.1
- 安裝配置EDK2
設置TARGET=NOOPT,TARGET_ARCH=X64,TOOL_CHAIN_TAG=VS2010x86,別的步驟請參考其它文章
編譯OVMF
給OvmfPkg添加NOOPT的TARGET,2016-7-16的edk2需要修改,以后的edk2更新了應該不需要。
執行編譯命令:build -p OvmfPkg\OvmfPkgX64.dsc -D SOURCE_DEBUG_ENABLE
把編譯得到的文件D:\EDK2\Build\OvmfX64\NOOPT_VS2010x86\FV\OVMF.fd復制到d:\temp\目錄下(這一步無所謂,知道編譯后的OVMF文件在哪就行)
安裝調試工具
- 安裝windbg(6.11.1.404_x86外的其它版本也可以)
- 安裝Intel UDK Debugger Tool v1.5,切記別修改默認安裝目錄C:\Program Files (x86)\Intel\Intel(R) UEFI Development Kit Debugger Tool
- 安裝qemu(特定版本http://homepage3.nifty.com/takeda-toshiya/qemu/qemu-0.13.0-windows.zip)
- 啟動Intel UDK Debugger Tool
- 啟動Qemu,Windbg馬上連接上斷下來(這里應該是最早的斷點),g繼續運行,隨着UEFI啟動Windbg加載很多PDB符號,在Windbg中主動斷下來后如下圖
qemu-system-x86_64.exe -bios d:\temp\OVMF.fd -serial pipe:qemu_pipe_dbg
調試UEFI程序
- 編譯測試程序
build -p AppPkg\AppPkg.dsc -m AppPkg\Applications\Main\Main.inf - 復制文件d:\EDK2\Build\AppPkg\NOOPT_VS2015x86\X64\Main.efi到d:\temp\myefihd.vdi硬盤鏡像中(通過VirtualBox虛擬機)
- 啟動Intel UDK Debugger Tool
- 啟動Qemu
qemu-system-x86_64.exe -bios d:\temp\OVMF.debug -hda d:\temp\myefihd.vdi -serial pipe:qemu_pipe_dbg - Windbg連上后下未決斷點(在入口函數上下斷點,Main.efi的入口函數是main),g繼續執行
- 等一會OVMF就會啟動內置的shell,運行准備好的測試程序Main.efi
- Windbg馬上就會斷下來
參考資料
https://software.intel.com/en-us/articles/xdb-agent-based-uefi-debug