Step to UEFI (119)OVMF 的 SourceLevelDebug

最近看到一篇介绍 QEMU 下实现 OVMF Source Level Debug的文章【参考1】,然后动手实验了一下。我试验的环境是 VirtualBox 创建的Windows7 32位的虚拟机,就是说我在虚拟机中运行 QEMU 虚拟机。编译器是 VS2013,之前一直在这个下面编译 UDK2015代码。具体的 OVMF 代码, 使用的是很久之前下载的能够编译的代码(最新的无法通过编译)。此外,还需要准备下面的软件:

1. Intel UDK Debugger Tool v1.5
2. WinDBG 6.11.1.404_x86
3. Qemu 0.13.0 (注意,这是特别修改的版本,最新的QEMU不行)

首先要安装 WinDBG,之后再安装 Intel UDK Tool,安装的时候要设置Debug port 如下(安装之后可以修改),其余均使用默认设置

ov1

之后,OVMF 的代码需要修改,有如下几个地方:
1. 在 OVMFPKG/OvmfPkgIa32.dsc 里面的 BUIDL_TARGETS 中加入 NOOPT的编译目标(新版本的 OVMF代码默认含有这个项目,但是因为我的代码比较久远,需要手工添加 )
ov2

2. 在 QemuBootOrderLib.c 中加入 _allmul 的定义(来自 StdLib、LibC、CRTIa32\Imul.c),如果没有加入,在编译时会出现下面的错误提示(没有找到原因,有兴趣的朋友可以试试,然然后告诉我)

Building ... c:\ovmf20142\IntelFrameworkModulePkg\Universal\BdsDxe\BdsDxe.inf [I
A32]
"C:\Program Files\Microsoft Visual Studio 12.0\Vc\bin\link.exe" /OUT:c:\
ovmf20142\Build\OvmfIa32\NOOPT_VS2013\IA32\IntelFrameworkModulePkg\Universal\Bds
Dxe\BdsDxe\DEBUG\BdsDxe.dll /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF
=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /
ENTRY:_ModuleEntryPoint /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /
DRIVER /DEBUG @c:\ovmf20142\Build\OvmfIa32\NOOPT_VS2013\IA32\IntelFrameworkModu
lePkg\Universal\BdsDxe\BdsDxe\OUTPUT\static_library_files.lst
QemuBootOrderLib.lib(ExtraRootBusMap.obj) : error LNK2001: unresolved external s
ymbol __allmul
c:\ovmf20142\Build\OvmfIa32\NOOPT_VS2013\IA32\IntelFrameworkModulePkg\Universal\
BdsDxe\BdsDxe\DEBUG\BdsDxe.dll : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 12.0\Vc\bi
n\link.exe"' : return code '0x460'
Stop.

上面完成之后,即可进行编译,编译指令

Build –a IA32 –p OvmfPkg\OvmfPkgIa32.dsc –b NOOPT –D SOURCE_DEBUG_ENABLED

编译之后生成的文件在 build\Ovmfia32\NOOPT_VS2013 ,文件名是 ovmd.fd
接下来检查了修改 Intel UDK 的配置,在下面这个位置
ov3

其中需要检查 port设置,同时加入你BIOS Source code 的目录。
ov4

检查之后就可以运行 UDK 工具了,他会自动调用起来 WinDbg。
将这个文件放到qemu 的目录下,使用下面的命令启动 QEMU
Qemu-system-x86_64.exe –bios OVMF.fd –serial pipe:qemu_pipe_dbg
最终,可以看到 WinDbg 中出现了Source Code。
ov5

更多的玩法后面会花点时间慢慢研究.

参考:
1.http://www.cnblogs.com/zhongts/p/5789686.html [原创]搭建UEFI调试环境

《Step to UEFI (119)OVMF 的 SourceLevelDebug》有2个想法

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注