如何用VS调试NT32模拟环境

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-master\BaseTools\Bin目录下。

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 --nt32
build  %1

存储后,在“生成命令行”中,填写:VSbuild.bat;在“重新生成命令行”中,填写:VSbuild.bat all;在“清除命令行”中,填写:VSbuild.bat clean,并点击下一步。

F. VS开始添加文件,需要一定时间。等待文件全部添加完毕,我们要为VS环境做些小改动:在v:\edk2-master\nt32pkg\include\common\WinNTInclude.h

加入这样一行:

#pragma warning(disable : 4005)

这是为了消除VS环境下build的重复定义错误。用VS Command Prompt则不需要这一步。

G. 现在UEFI/EDKII所有的程序都导入到VS里了,你可以利用VS的强大功能编辑他们了!

2.编译和调试

A. 我们可以开始build了。按下F7或者选择build。一切顺利Image就会生成在V:\edk2-master\Build\NT32IA32\DEBUG_MYTOOLS\IA32\ 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内核吧!

猜你喜欢

转载自blog.csdn.net/f2157120/article/details/108289932