UDK2017 来了

UDK 最近放出了 2017 【参考1】,这种正式的Release能够保证一定能通过编译,是稳定的版本(五月份的时候我抓过一次 EDK2 , 连编译都无法通过)。印象中前一个UDK2015 似乎并没有使用多长时间,看起来 EDK2 仍然在努力发展壮大。

首先下载 Source Code,我选择的是直接通过这个链接下载而不是 GIT 方式:

https://github.com/tianocore/edk2/archive/vUDK2017.zip

解压之后,和之前的一样,需要装一下编译必须的工具才能正常使用。在【参考2】下载edk2-BaseTools-win32。解压之后放在 BaseTools\Bin\Win32目录下。
Conf 目录中还缺少必要的 Target.TXT 之类的配置文件, 我们运行一次 BaseTools下的 Toolsetup.bat 即可。
然后,还需要nasm 这个汇编语言编译器。找到之后,将 nasm丢在 BaseTools\Bin\Win32目录下即可.
最后可以开始编译过程,和之前的命令相同,依然是:

Edksetup.bat
Build.bat

我是用的是 VS2013 X64的环境,编译命令为 build –a X64
ud2017

之后使用 build –a X64 run 启动 NT32 虚拟机:
udk20172

经过实验, 64Bit Application能够正常运行。看起来这是一个重要的改进。我们可以方便的在虚拟机中验证X64的Application了。

为了便于使用,这里放一个配置好的完整代码:

链接: http://pan.baidu.com/s/1boMd6c3 密码: ymxe

后面的程序和代码都会基于 UDK2017 环境.

参考:
1. https://github.com/tianocore/tianocore.github.io/wiki/UDK2017
2. https://github.com/tianocore/tianocore.github.io/wiki/UDK2017-How-to-Build
3. https://github.com/tianocore/edk2-BaseTools-win32

《UDK2017 来了》有34个想法

  1. UDK2017 更改了很多内部代码,以前写的很多源码都不能直接编译,或者编译后不能正常运行。
    现在仍然使用UDK2015

  2. 我前两天下载最新版,nt32一直build不过,说找不到windows.h的头文件,我把MinGW的include包进去后,又说关联的String.h里某项有问题。我总不致于去修改头文件吧。请问博主你的Nt32Pkg-Include-Common-WinNTInclude.h文件中需要包含的windows.h放在哪里

    1. 一般是 SDK 版本不匹配导致的,比如: 你系统装的是 X64 的SDk ,但是-a IA32 的时候他要去找 IA32 的 SDK .我应对的办法是:再COPY 一份。比如,提示信息说 program file 下面没有,就去 program file(x86) 里面找一下,然后copy到前者中,一般copy bin 目录即可,差不多50MB 。

  3. 以下方式,可以compiler 成功
    Note: 嘗試用TOOL_CHAIN_TAG = VS205x86 ,但compiler 都fail,又改回 TOOL_CHAIN_TAG = VS2012x86 .....就compiler 成功

    1.下載且解開版主的UDK2017-workable.zip.
    2.Download VC compiler tools with virtual studio 2013 u5 and virtual studio 2015
    3 Run Developer Command Propmt for VS2012
    4.Change path to your WORKSPACE (ex D:\UDK2017)
    5.Run Edk2setup
    6.Change compiler environment D:\UEFI\UDK2017\Conf\target.txt
    ACTIVE_PLATFORM = AppPkg/AppPkg.dsc
    TARGET = RELEASE
    TARGET_ARCH = X64
    TOOL_CHAIN_TAG = VS2012x86
    7. type "build -a X64 -p AppPkg\AppPkg.dsc"

    1. VS2015x86 编译NT32PKG 可以成功的,具体要看错误信息。大概的原因是:UDK 上写的要调用 WDK8.1, 而实际上我们安装的 VS2015 是 WDk8.0 ,目录名称上有一些差别导致无法找到编译工具。我的解决办法是:直接把调用的工具copy到他需要调用的路径下即可。

  4. 雖然UDK2017改了很多(例如加的ARM的code ....ARMPkg),而造成某些以前寫程式無法compiler 完成,但我覺得還是要跟上,,,因為UDK 還會一直upgrade, 那我們以前寫的程式就跟不上,最新的BIOS,
    我最近也花了很多時間去修改以前的程式,讓tool的code 可以用UDK2017 compiler 成功
    if 公司的tool需要在ARM system 上run, 但要用UDK2017 compiler 的efi file 才能用,,因UDK2015沒support,那怎麼辦呢? (舉例...........)

    所以我建議還是要debug一下以前寫的code,,,讓其compiler 成功 (debug 是很累,,,但compiler 出現以下訊息,,那種心情是很爽的....................
    - Done -
    Build end time: 14:43:38, Sep.17 2017
    Build total time: 00:01:14

    以上純屬個人意見,,,,沒有攻擊任何人ㄡ................

  5. 您好,下载了你配置好的包,还是无法编译,显示下面的错误,不知道是怎么回事
    'C:\Program' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Vc\bin\x86_amd64\cl.exe”: 返回代码“0x1”
    Stop.
    按照官方的配置也是同样的错误,卡在这里过不去,麻烦给点建议,谢谢!

    1. 你去 conf/target.txt 中修改 Tool_Chain_Tag 为你自己的编译器版本就可以了

      # TAGNAME List Optional Specify the name(s) of the tools_def.txt TagName to use.
      # If not specified, all applicable TagName tools will be
      # used for the build. The list uses space character separation.
      TOOL_CHAIN_TAG = VS2015

  6. 下了一套,编译刚开始就中断,说8.1的winnt.h里面__cpuindex不能作为内部函数,错误代码C4163,请问是什么原因。
    环境是win7 64位,编译器是VS2013x64。

    1. 你的问题我没有碰到过,贴一下具体的错误信息吧。

      另外,一般遇到的问题是:ToolsChain没有设置正确,有时候

      默认的值编译会有错误你修改一下试试看?

  7. 您好,下载您的配置好的包,还是无法编译,显示下面的错误,不知道是怎么回事
    ‘C:\Program’ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    NMAKE : fatal error U1077: “”C:\Program Files (x86)\Microsoft Kits\8.0\bin\x64\rc.exe”: 返回代码“0x1”
    Stop.
    按照官方的配置也是同样的错误,卡在这里过不去,麻烦给点建议,谢谢!

    1. 我遇到过这样的错误,你去”C:\Program Files (x86)\Microsoft Kits\8.0\ 下面搜索一下 rc.exe 然后在C:\Program Files (x86)\Microsoft Kits\8.0\bin\ 中创建x64\目录把它丢进去试试看。

      1. 问题在于没在C:\Program Files (x86)\Microsoft Kits\8.0\ 下面找到 rc.exe 这个文件,我把C:\Program Files (x86)\Microsoft Kits\8.1\下的re.exe放进去可以编译但是没法生成helloworld.exe

      1. 刚刚尝试后编译成功了,但是没有找到helloworld.exe,只找到了helloworld.efi文件,而且最后build成功时候有一串很奇怪的文字类似于什么0个文件,请问下您应该怎么办

  8. 博主你好 ,

    请问博主有没有使用过 C库里面的 fopen 打开文件的函数 ,我下载博主配置好的 使用 VS2010编译 ,编译出来的efi文件 执行 fopen时候怎么都返回错误 ,博主可以帮忙看下么,就是AppPkg\ArithChk 里面的这个应用 把写入到文件的宏打开build出来的efi文件 的fopen打开文件都出错
    麻烦博主帮忙看下 ,非常感谢

  9. I got below result after set "TARGET_ARCH = ARM" in target.txt and then type "build -a ARM -p AppPkg\AppPkg.dsc" in CMD prompt. Do you have any comment to me? Thank you very much!

    D:\SRC\EADK\UDK2017>build -a ARM -p AppPkg\AppPkg.dsc
    Build environment: Windows-post2008Server-6.2.9200
    Build start time: 08:20:40, Mar.15 2018

    WORKSPACE = d:\src\eadk\udk2017
    ECP_SOURCE = d:\src\eadk\udk2017\edkcompatibilitypkg
    EDK_SOURCE = d:\src\eadk\udk2017\edkcompatibilitypkg
    EFI_SOURCE = d:\src\eadk\udk2017\edkcompatibilitypkg
    EDK_TOOLS_PATH = d:\src\eadk\udk2017\basetools
    EDK_TOOLS_BIN = d:\src\eadk\udk2017\basetools\bin\win32
    CONF_PATH = d:\src\eadk\udk2017\Conf

    Architecture(s) = ARM
    Build target = DEBUG
    Toolchain = VS2013x86

    Active Platform = d:\src\eadk\udk2017\AppPkg\AppPkg.dsc

    Processing meta-data ..............

    build...
    : error C0DE: Unknown fatal error when processing [d:\src\eadk\udk2017\MdePkg\Library\BaseMemoryLib\BaseMemoryLib.inf]

    (Please send email to edk2-devel@lists.01.org for help, attaching following call stack trace!)

    (Python 2.7.3 on win32) Traceback (most recent call last):
    File "build\build.py", line 2283, in Main
    File "build\build.py", line 2035, in Launch
    File "build\build.py", line 1870, in _MultiThreadBuildPlatform
    File "c:\Users\Public\Documents\BuildPool\BaseTools\build\Source\Python\AutoGen\AutoGen.py", line 4128, in CreateMakeFile
    File "c:\Users\Public\Documents\BuildPool\BaseTools\build\Source\Python\AutoGen\AutoGen.py", line 4134, in CreateMakeFile
    File "c:\Users\Public\Documents\BuildPool\BaseTools\build\Source\Python\AutoGen\GenMake.py", line 184, in Generate
    File "c:\Users\Public\Documents\BuildPool\BaseTools\build\Source\Python\AutoGen\GenMake.py", line 526, in _CreateTemplateDict
    File "c:\Users\Public\Documents\BuildPool\BaseTools\build\Source\Python\AutoGen\GenMake.py", line 714, in CommandExceedLimit
    KeyError: 'PATH'

  10. 这是什么原因呀?
    'C:\NASMnasm' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    NMAKE : fatal error U1077: “"C:\NASMnasm”: 返回代码“0x1”
    Stop.

发表回复

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