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
之后使用 build –a X64 run 启动 NT32 虚拟机:
经过实验, 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 更改了很多内部代码,以前写的很多源码都不能直接编译,或者编译后不能正常运行。
现在仍然使用UDK2015
是吧? 我刚开始实验。如果这样的话,那是很讨厌了。
我前两天下载最新版,nt32一直build不过,说找不到windows.h的头文件,我把MinGW的include包进去后,又说关联的String.h里某项有问题。我总不致于去修改头文件吧。请问博主你的Nt32Pkg-Include-Common-WinNTInclude.h文件中需要包含的windows.h放在哪里
一般是 SDK 版本不匹配导致的,比如: 你系统装的是 X64 的SDk ,但是-a IA32 的时候他要去找 IA32 的 SDK .我应对的办法是:再COPY 一份。比如,提示信息说 program file 下面没有,就去 program file(x86) 里面找一下,然后copy到前者中,一般copy bin 目录即可,差不多50MB 。
它用的是"windows.h",也就是说在当前目录下,但当前目录下只有一个WinNTInclude.h文件
以下方式,可以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"
TOOL_CHAIN_TAG = VS2015x86 --> Fail
TOOL_CHAIN_TAG = VS2012x86 ---> 成功
VS2015x86 编译NT32PKG 可以成功的,具体要看错误信息。大概的原因是:UDK 上写的要调用 WDK8.1, 而实际上我们安装的 VS2015 是 WDk8.0 ,目录名称上有一些差别导致无法找到编译工具。我的解决办法是:直接把调用的工具copy到他需要调用的路径下即可。
雖然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
以上純屬個人意見,,,,沒有攻擊任何人ㄡ................
您好,下载了你配置好的包,还是无法编译,显示下面的错误,不知道是怎么回事
'C:\Program' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Vc\bin\x86_amd64\cl.exe”: 返回代码“0x1”
Stop.
按照官方的配置也是同样的错误,卡在这里过不去,麻烦给点建议,谢谢!
你去 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
我用的是VS2013,修改之后还是会报这个错
请问这个问题有没有解决,我也遇到了
建议你换 UDK2019。向前看。
下了一套,编译刚开始就中断,说8.1的winnt.h里面__cpuindex不能作为内部函数,错误代码C4163,请问是什么原因。
环境是win7 64位,编译器是VS2013x64。
你的问题我没有碰到过,贴一下具体的错误信息吧。
另外,一般遇到的问题是:ToolsChain没有设置正确,有时候
默认的值编译会有错误你修改一下试试看?
多谢,把toolchain改为VS2013x86后,在VS2013的命令行里编译成功了。
您好,下载您的配置好的包,还是无法编译,显示下面的错误,不知道是怎么回事
‘C:\Program’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。
NMAKE : fatal error U1077: “”C:\Program Files (x86)\Microsoft Kits\8.0\bin\x64\rc.exe”: 返回代码“0x1”
Stop.
按照官方的配置也是同样的错误,卡在这里过不去,麻烦给点建议,谢谢!
我遇到过这样的错误,你去”C:\Program Files (x86)\Microsoft Kits\8.0\ 下面搜索一下 rc.exe 然后在C:\Program Files (x86)\Microsoft Kits\8.0\bin\ 中创建x64\目录把它丢进去试试看。
问题在于没在C:\Program Files (x86)\Microsoft Kits\8.0\ 下面找到 rc.exe 这个文件,我把C:\Program Files (x86)\Microsoft Kits\8.1\下的re.exe放进去可以编译但是没法生成helloworld.exe
我自己在官网配置的build时候提示D:VC\Vc\bin\cl.exe 返回代码fx01
您好,想问下,最后build成功的那个helloworld在哪可以找到
直接在 build 目录下 搜索 helloworld.exe 看看
刚刚尝试后编译成功了,但是没有找到helloworld.exe,只找到了helloworld.efi文件,而且最后build成功时候有一串很奇怪的文字类似于什么0个文件,请问下您应该怎么办
Uefi 的可执行文件就是 efi 啊,不是 exe
你好,那请问下VS2015环境下怎么不可以运行?
这个问题不好回答,建议你问问身边的人吧
博主你好 ,
请问博主有没有使用过 C库里面的 fopen 打开文件的函数 ,我下载博主配置好的 使用 VS2010编译 ,编译出来的efi文件 执行 fopen时候怎么都返回错误 ,博主可以帮忙看下么,就是AppPkg\ArithChk 里面的这个应用 把写入到文件的宏打开build出来的efi文件 的fopen打开文件都出错
麻烦博主帮忙看下 ,非常感谢
建议你化简一下你的代码,再试试。另外,在出错的时候,可以使用 %r 输出一下错误的原因。
我想build 出EFI file 可以在ARM 64 bit system 的uefi shell 可以run, 請問 inf file 要設定? build 的command 是? 感謝!
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'
不好意思,没有研究过。一直都是在 X86 下面玩的。
这是什么原因呀?
'C:\NASMnasm' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
NMAKE : fatal error U1077: “"C:\NASMnasm”: 返回代码“0x1”
Stop.
环境配置要求你将一个 nasm 放在 c:\nasm目录下