UDK2018 来了—-常见编译问题

UDK2018 前一段时间正式 release 了:

https://github.com/tianocore/tianocore.github.io/wiki/UDK2018

编译方法可以在下面的页面找到

https://github.com/tianocore/tianocore.github.io/wiki/UDK2018-How-to-Build

要求 VS2015(我实验用VS2013编译没问题,但是为了避免后续碰到奇怪的问题,建议老老实实用 VS2015)、NASM 2.12.01、Python2.7.x、Openssl (这个应该是第一次正式提出来作为要求,但是实验表明如果只使用 Nt32那么是完全无需安装的)
1. 需要安装 VS2015(特别注意要勾选安装 VC 编译器和 WDK)
2. 安装 Python2.7.14(特别注意在安装界面选择将 Python 加入 Path)
3. 安装 Nasm(特别注意他默认的安装路径不是 c:\Nasm, 需要安装之后手工拷贝到这个目录下)
4. 解压edk2-vUDK2018.tar到 c:\UDK2018
5. 在 edksetup.bat 中加入下面的语句
a. Path c:\nasm;%path%
b. Set PYTHON_HOME=c:\python27
6. 解压edk2-BaseTools-win32-master到 BaseTools\Win32下面
7. 打开“VS2015 x64 Native Tools Command Prompt”。运行一次 edksetup.bat 之后运行 build。这样的编译会导致错误,但是能够在 conf\下面生成我们需要的 Target.bat 在这个文件中找到 TOOL_CHAIN_TAG = MYTOOLS ,修改为TOOL_CHAIN_TAG = VS2018x86,接下来就可使用下面的方法开始编译
a. 输入 edksetup.bat – -nt32
b. Build –a X64 或者 build –a IA32
c. Build run 即可运行 NT32 模拟环境

如果你的运气好,那么上述配置完成之后就可以正常使用 UDK2018 了。如果你的运气不好,还可能像我这样碰到下面的错误:
GenFds…
: error C0DE: Tools code failure
Please send email to edk2-devel@lists.01.org for help, attaching following call stack trace!

Traceback (most recent call last):
File “GenFds\GenFds.py”, line 228, in main
File “c:\Users\Public\Documents\BuildPool\BaseTools\build\Source\Python\Workspace\WorkspaceDatabase.py”, line 164, in __init__
File “c:\Users\Public\Documents\BuildPool\BaseTools\build\Source\Python\Common\LongFilePathOs.py”, line 25, in remove
WindowsError: [Error 32] The process cannot access the file because it is being used by another process: ‘\\\\?\\c:\\edk2-vudk2018\\conf\\.cache\\build.db’

Exception AttributeError: “‘WorkspaceDatabase’ object has no attribute ‘Conn'” in > ignored
build…
: error 7000: Failed to execute command
GenFds -f c:\edk2-vudk2018\Nt32Pkg\Nt32Pkg.fdf –conf=c:\edk2-vudk2018\conf -o c:\edk2-vudk2018\Build\NT32IA32\DEBUG_VS2015x86 -t VS2015x86 -b DEBUG -p c:\edk2-vudk2018\Nt32Pkg\Nt32Pkg.dsc -a IA32 -D “EFI_SOURCE=c:\\edk2-vudk2018\\edkcompatibilitypkg” -D “EDK_SOURCE=c:\\edk2-vudk2018\\edkcompatibilitypkg” -D “TOOL_CHAIN_TAG=VS2015x86” -D “TOOLCHAIN=VS2015x86” -D “TARGET=DEBUG” -D “FAMILY=MSFT” -D “WORKSPACE=c:\\edk2-vudk2018” -D “EDK_TOOLS_PATH=c:\\edk2-vudk2018\\basetools” -D “ARCH=IA32” -D “ECP_SOURCE=c:\\edk2-vudk2018\\edkcompatibilitypkg” [C:\edk2-vUDK2018]

直接执行最后那一段出现问题的批处理是没问题的。就是说,在编译过程中 GenFds在访问 build.db 的时候会出现问题。顺便多说一句,很多年前我碰到过UEFI编译环境中的这支文件和公司杀毒软件冲突的情况。编译过程需要访问的这个文件被杀毒软件锁定导致编译无法继续。最诡异的是这个错误是随机出现的。最终只能更换到未安装杀毒软件的机器上编译,最终和杀毒软件厂商沟通,前后花了6个月才解决。因此,出现这样的问题非常令人头痛。
仔细观察得知执行的 GenFds 是位于\BaseTools\Bin\Win32下面的GenFds.exe,这是Python编译生成的 EXE。此外在\BaseTools\BinWrappers\WindowsLike 下面还存在GenFds.bat。它内容如下:

@setlocal
@set ToolName=%~n0%
@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*

意思就是说,直接调用 Python去执行 GenFds.py。因此,可以将\BaseTools\Bin\Win32\GenFds.exe改名为GenFds.LABZ。然后把\BaseTools\BinWrappers\WindowsLike加入Path路径。编译过程中调用 GenFds指令实际执行的是 GenFds.bat。具体修改方法是在 Edksetup.bat 中加入下面的语句

path c:\nasm;BaseTools\BinWrappers\WindowsLike;%path%
set PYTHON_HOME=c:\python27;

最终可以保证编译正常。如果你在使用过程中碰到了 UDK2018 的问题,不妨在下面给我留言。

=============================================================

2018年6月11日

前面提到的“需要安装 VS2015(特别注意要勾选安装 VC 编译器和 WDK)” 其中应该是 SDK

UDK2018 来了—-常见编译问题》上有 2 条评论

  1. K

    特别注意要勾选安装 VC 编译器和 WDK
    这两个在安装中,我选择自定义安装,都没找到您说这两个?可惜不能放图片

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注