UEFI开发学习17 – Windows搭建UEFI开发环境

现在好多UEFI开发环境搭建都是一些初学者摸索记录的,有些步骤其实是非必要的。一个初学者看这些只会多走弯路,最好的办法就是看官方的文档,这样才原汁原味!本文以编译UDK2018为目标,在Windows上搭建开发环境。Linux篇移步->UEFI开发学习1 – Ubuntu下搭建UDK2018开发环境

步骤一、准备

1. UDK2018源码:https://github.com/tianocore/edk2/releases/tag/vUDK2018   无法访问的点击这里下载

2. NASM:https://www.nasm.us  下载ZIP后缀的文件

3. IASL:https://acpica.org/downloads/binary-tools (用于编译asl代码,OvmfPkg有用到)

4. Python:https://www.python.org/downloads/windows/    版本下载2.7

5. Cxfreeze:https://sourceforge.net/projects/cx-freeze/files/4.3.1/cx_Freeze-4.3.1.win-amd64-py2.7.msi/download

6. VS2015:http://download.microsoft.com/download/0/f/f/0ff02315-ddd7-46a8-a60c-e809b5d170da/vs2015.2.pro_enu.iso

UDK代码主要由C语言、汇编、ASL、以及辅助性文件(如.sd、.vfr、.uni、.dsc等)组成,要把这些文件转换成机器语言就需要对应的编译工具。编译C语言需要VS,ASL代码需要用IASL,.S汇编文件要用NASM,至于Python,则是用于编译BaseTools,编译好的BaseTools用来处理辅助文件的。

步骤二、工具安装

1. 解压下载的NASM至C盘根目录(其他盘自测),在新建一个名为NASM_PREFIX的系统变量,路径为:C:\nasm\,注意路径后面要加一个反斜杠,不然调用出错!

2. 解压ASL到C盘ASL文件夹,并把IASL的路径添加到系统变量path中(用于编译asl代码,OvmfPkg有用到)。

3. 正常安装Python,无需特别设置。

4. 正常安装,注意设置python的安装路径,因为它要把文件放到python的目录。这一步安装不对将导致basetools编译错误!

5. 安装VS2015。实际上VS2012,VS2013也可以编译,但是在最新的EDK2无法使用,需要2015及以上版本才可以;而UDK2018支持最高的VS是2015,所以安装VS2015是比较合适的选择。安装的时候无需全部安装,只勾选安装Windows SDK即可,需要占用10G+的空间。

步骤三、编译

1. 编译BaseTools

UDK的代码是由很多类型的文件组成的,VS只是用来编译C代码,那VFR,SD,以及如何组织文件生成固件等用什么工具呢?它就是BaseTools!

代码在首次使用的时候需要编译BaseTools,打开VS2015的命令行工具,执行:

edksetup.bat rebuild

编译完成后可在BaseTools\Bin\Win32看到各种生成的工具

2. 初始化编译环境

代码根目录下的edksetup.bat除了用来编译BaseTools,还可以初始化编译环境,每次打开VS的命令行窗口都需要初始化一次才能使用Build,使用方法可在批处理后加参数-h查看,即:

edksetup.bat -h

3. 编译Nt32Pkg

如果要编译64位的NT32,执行edksetup.bat的时候需要加参数--nt32 X64,不加有可能出错(VS2012,VS2013),编译32位的则无需加参数,直接执行批处理。下面是编译64位NT32

edksetup.bat --nt32 X64

编译Nt32Pkg命令如下:

build -a X64 -p Nt32Pkg/Nt32Pkg.dsc -t VS2015x86

运行NT32,在编译的命令后加run即可:

build -a X64 -p Nt32Pkg/Nt32Pkg.dsc -t VS2015x86 run

或者到编译的目录Build\NT32X64\DEBUG_VS2015x86\X64运行SecMain.exe也可启动NT32环境

如果是命令启动的,可以使用Ctrl + C组合键在命令行窗口关闭NT32环境。

4. 编译AppPkg

AppPkg是一个实现了可以调用C语言标准库的包,所以可以在此编写纯C语言的efi app。编译命令:

build -a X64 -p AppPkg/AppPkg.dsc -t VS2015x86

5. 编译OvmfPkg

OvmfPkg是一个完整的QEMU固件,什么是QEMU呢?

QEMU是一个虚拟机,有虚拟硬件的功能,所以支持一些IO,memory等硬件操作,这是NT32模拟环境所不具备的。UDK2018中可以编译生成一个QEMU的固件,但是需要配合QEMU使用,使用方法参考 UEFI开发学习14 – 使用QEMU

编译命令如下:

build -p OvmfPkg/OvmfPkgX64.dsc -t VS2015x86

编译成功后会在Build\OvmfX64\DEBUG_VS2015x86\FV生成一个OVMF.fd文件,可在QEMU使用。

6. 修改配置文件编译

前面都是手动输入命令参数进行编译的,还有一种方法是修改Conf/target.txt文件,该目录默认是不存在的,首次执行edksetup.bat后会自动生成。target.txt主要有几个可以修改:

ACTIVE_PLATFORM :对应-p参数,用于设置编译的包

TARGET:指定编译形式,可设置为DEBUG或RELEASE。DEBUG版本可打印调试信息,RELEASE版本则不可以输出调试信息。命令行编译可用-b参数指定

TARGET_ARCH:编译的目标架构,Windows下设置为IA32或X64,其它类型参考target.txt的注释

TOOL_CHAIN_TAG:指定编译工具,Windows使用VS编译,有32位系统跟64位系统之分,区别在于VS的安装目录,32位系统没有Program Files(x86)这个文件夹,VS是安装在Program Files下的,所以在32位系统指定编译工具的时候,不需要加x86,如:

build -p OvmfPkg/OvmfPkgX64.dsc -t VS2015

工具的定义可在Conf/tools_def.txt文件看到,配置了以上参数之后,直接在命令行窗口执行build即可编译。

说明一下的是,如果配置了文件,又在命令行指定,则优先使用命令行中的命令。

常见错误

edk2-vudk2018\StdLib\Include\sys/EfiCdefs.h(342): warning C4117: macro name '__STDC_HOSTED__' is reserved, '#define' ignored
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Vc\bin\x86_amd64\cl.exe"”: 返回代码“0x2”

打开EfiCdefs.h文件,找到报错对应的行数,注释掉即可!

 

 

版权声明:
作者:bin
链接:https://ay123.net/mystudy/uefi/1185/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
UEFI开发学习17 – Windows搭建UEFI开发环境
现在好多UEFI开发环境搭建都是一些初学者摸索记录的,有些步骤其实是非必要的。一个初学者看这些只会多走弯路,最好的办法就是看官方的文档,这样才原汁原味!……
<<上一篇
下一篇>>
文章目录
关闭
目 录