Windows环境下使用VS调试EDK
一、先下载好以下软件资料
【1】EDK2
下载地址:https://github.com/tianocore/edk2
功能说明:EDK2是UEFI标准的一种具体实现,而且是开源的
【2】Python2.7.12
下载地址:https://www.python.org/downloads/windows/
【3】Openssl
下载地址:https://www.openssl.org/source/
【4】Visual Studio 2015
下载地址:https://visualstudio.microsoft.com/
【5】edk2-BaseTools
下载地址: https://codeload.github.com/tianocore/edk2-BaseTools-win32/zip/master
【6】nasm-2.13.01-installer-x86.exe
下载地址:https://www.nasm.us/pub/nasm/releasebuilds/2.13.01/win32/
二、软件配置
【1】软件安装
上一步下载的资源中,含有3个安装文件和3个需要解压的文件,文件的安装和配置按以下步骤依次进行。
1)先将VS2015安装好,注意需要勾选和C/C++相关的安装组件;
2)接着解压EDK到某个文件夹,在该文件夹里找到CryptoPkg\Library\OpensslLib\中的openssl文件夹,删除其中的内容,并将openssl-OpenSSL_1_1_0g.zip解压到该目录下。再将edk2-BaseTools解压到主目录下的BaseTools/Bin文件夹中,并命名为Win32(里面含有许多需要python环境来支持的文件);
3)接着安装nasm;
4)最后安装python;
【2】环境变量添加
该步骤为了避免每次cmd运行edksetup.bat –nt32后都要在shell里配置环境变量的麻烦。
操作方法为:右键我的电脑——属性——高级系统设置——高级——环境变量,添加如下环境变量名和变量值:
|
环境变量名 |
变量值 |
|
PYTHON_HOME |
python的安装路径 |
|
Path(PATH) |
Openssl文件夹的路径;nasm.exe的路径 |
如下图:
三、尝试编译EDK2工程
【1】先打开EDK2的解压目录,在目录下cmd打开shell界面输入edksetup.bat –-nt32并确定,估计目前应该会失败。
【2】前面编译失败的话,需要来修改一下工程里的配置文件,使用记事本或NotePad++打开主目录下的BaseTools/Conf/target.template,做以下修改:
ACTIVE_PLATFORM = Nt32Pkg/Nt32Pkg.dsc
TOOL_CHAIN_TAG = VS2015
【3】现在再次cmd,运行edksetup.bat -–nt32应该没有error提示了,Warning暂时不用取管它。运行结果如下图:
【4】接着build,出现“Done”,表示编译最终通过。
【5】最后build run,打开shell界面,即可运行shell下的App,如输出“Hello World!”
四、编写简单Shell APP并调用VS调试
一个简单的Shell APP最少需要包含一个.c文件和.inf文件,其中.inf文件是用于指导编译器编译本module。下面给出简单的.c和.inf文件的具体内容。
.c文件:
#include <Uefi.h>
EFI_STATUS
EFIAPI
UefiHello (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
_asm int 3 /*调试程序*/
SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello_20181130\n");
return EFI_SUCCESS;
}
.inf文件:
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = MyTest_1 #输出文件的名字为MyTest_1.efi
#MODULE_UNI_FILE = MyTest_1.uni
FILE_GUID = 6987936E-ED34-44db-AE97-1FA5E4FFFFFF
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 1.0
ENTRY_POINT = UefiHello
[Sources]
MyTest_1.c
#.dec文件里定义include的路径,如include <Uefi.h>的路径在MdePkg/Include文件夹中,.dec文件用于提供本pkg的资源
[Packages]
MdePkg/MdePkg.dec
[LibraryClasses]
UefiApplicationEntryPoint
UefiLib
[BuildOptions]
MSFT:*_*_IA32_CC_FLAGS = /Oi-
调用VS调试工具的要点是,在需要停顿去逐步运行的代码前添加代码行:_asm int 3,以及在.inf文件中添加[BuildOptions] MSFT:*_*_IA32_CC_FLAGS = /Oi-
如下图的目的是在输出Hello前停顿调试:
该APP在shell中运行后会弹出:
点击“调试”,系统会启动VS,弹窗点击“Break”即可进入断点处代码。
接下来在想要运行停顿的地方设置断点即可调试了。
浙公网安备 33010602011771号