需要的软件包如下
安装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