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 来了》上有 18 条评论

  1. snowman1101

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

    回复
  2. KRISWANG

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

    回复
    1. ziv2013 文章作者

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

      回复
  3. Tim

    以下方式,可以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. ziv2013 文章作者

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

      回复
  4. Tim

    雖然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. ziv2013 文章作者

      你去 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. Yan

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

    回复
    1. ziv2013 文章作者

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

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

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

      回复
  7. 张迁

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

    回复
    1. ziv2013 文章作者

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

      回复

发表评论

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