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
这里下载
可以安装在任何目录,譬如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内核吧!