首页
论坛
课程
招聘
雪    币: 1057
活跃值: 活跃值 (244)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝

[原创]用VS编译edk2并用windbg源码调试OVMF

2020-1-7 12:07 3365

[原创]用VS编译edk2并用windbg源码调试OVMF

2020-1-7 12:07
3365

不知为什么,每次尝试去编译别人的项目都要踩n个坑,应该还是太菜了吧......编译成功后把方法记下来,以后回顾的时候方便看


1.下载edk2到文件夹edk2中并更新子模块
git clone https://github.com/tianocore/edk2.git edk2

cd edk2

git submodule update --init


2.安装工具链,我只试过2015和2019两个VS版本,任选一个就行
(1)安装VS2015,尝试创建一个Win32控制台程序,过程中会要求你安装必要的工具
(2)安装VS2019,打开后,选择“工具”->“获取工具和功能”,在安装列表中勾选“使用C++的桌面开发”,然后在右边的"安装详细信息"中勾选"使用C++的桌面开发"->"MSVC v141 -VS 2017 C++ x64/x86 生成工具",之后右下角的"修改"



3.安装相关程序

(安装相关程序在附件中,除了 Intel UDK Debugger Tool v1.5 以外不一定要安装在C盘下,也可以放在其他盘)

(1)安装NASM,并添加一条环境变量。(不一定要安装下C盘下,可以放到其他路径,下面也是)
NASM_PREFIX C:\NASM\

(2)安装PYTHON,并添加两条环境变量。
PYTHON_HOME C:\Python38
PYTHON_FREEZER_PATH %PYTHON_HOME%\Scripts

(3)添加一条关于IASL路径的环境变量。
IASL_PREFIX C:\ASL\

(4)安装windbg的32版本。

(5)安装qemu 0.13.0,安装后将qemu安装路径放到系统环境变量Path中

(6)安装Intel UDK Debugger Tool v1.5,切记别修改默认安装目录C:\Program Files (x86)\Intel\Intel(R) UEFI Development Kit Debugger Tool,安装过程中会要求设置windbg路径和调试方式,如下面三张图所示。





4.编译BaseTools
在edk2路径下打开命令行
edksetup.bat
cd BaseTools
nmake


5.修改配置文件
打开Conf\target.txt,以下是对于部分配置项的解释,配置相关的详细信息在Conf/tools_def.txt中
(1)ACTIVE_PLATFORM
编译目标,这里为EmulatorPkg/EmulatorPkg.dsc
(2)TARGET
编译目标版本,可以为DEBUG\RELEASE或者用户自定义,这里为DEBUG
(3)TARGET_ARCH
运行平台,这里为IA32
(4)TOOL_CHAIN_TAG
工具链,如果安装了VS2015,则设置为VS2015x86,如果安装了VS2019之后安装了VS2017工具链,则设置为VS2017


6.编译EmulatorPkg

在edk2路径下打开命令行
edksetup.bat
build
编译结果在Build\EmulatorIA32目录下可见


7.运行EmulatorPkg

运行Build\EmulatorIA32\DEBUG_VS2017\IA32\WinHost.exe,在shell下输入“fs0:”后回车就会转到WinHost.exe所在目录


8.编译可源码调试的OvmfPkgX64

在edk2路径下打开命令行
edksetup.bat

build -p OvmfPkg\OvmfPkgX64.dsc -D SOURCE_DEBUG_ENABLE
编译结果在Build\OvmfX64目录下可见,编译出的固件为Build\OvmfX64\DEBUG_VS2017\FV\OVMF.fd


9.调试OvmfPkgX64

(1)运行Start WinDbg with Intel UDK Debugger Tool,会显示出一个cmd和一个windbg,此时在等待管道连接


(2)运行qemu

qemu-system-x86_64 -bios OVMF.fd -L . -hda fat:rw:. -net none -serial pipe:qemu_pipe_dbg


(3)此时windbg会立刻自动连接上去并断下来,此时应该是最早的断点,输入g继续执行后,会加载很多很多符号,要加载很久






我所使用的安装工具以及一些学习资料在CSDN中:(包括Intel UDK Debugger Tool v1.5、qemu 0.13.0、windbg x86等)

https://download.csdn.net/download/qq_33522888/12099211

希望有更多的朋友一起交流关于edk2的学习




HWS计划·2020安全精英夏令营来了!我们在华为松山湖欧洲小镇等你

最后于 2020-5-6 19:36 被昵称好麻烦编辑 ,原因: 添加内容
最新回复 (5)
雪    币: 4459
活跃值: 活跃值 (55)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
TopC 活跃值 2020-1-7 14:53
2
0
本来开源的东西很多都编不过 因不挣钱 所以不负责
雪    币: 246
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ttwodoges 活跃值 2020-1-7 14:54
3
0
可以问一下你编译后打算做什么吗? 
雪    币: 1057
活跃值: 活跃值 (244)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
昵称好麻烦 活跃值 2020-1-7 15:28
4
0
ttwodoges 可以问一下你编译后打算做什么吗?
在看一本书《UEFI原理与编程》,学一下底层,写几个应用玩玩
雪    币: 1057
活跃值: 活跃值 (244)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
昵称好麻烦 活跃值 2020-1-7 15:34
5
0
TopC 本来开源的东西很多都编不过 因不挣钱 所以不负责
可是很多知名度挺高的项目,经常被人提起的,README里面也都描述得那么理所当然,我总怀疑是不是全世界就我一个人编译不过,为什么每次都要踩n多坑才能搞定
雪    币: 246
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ttwodoges 活跃值 2020-1-7 17:05
6
1
这个我倒是只去编译了一下,Linux下的环境会更容易编译成功,但是到后面就因为某些原因无法写程序自己编译,特指UDK2017还是UDK2018版本来着。Windows配置环境真的是噩梦呀
游客
登录 | 注册 方可回帖
返回