(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365)
从上次写完博客,过去了一个多月。中间到深圳出差,解决一个硬盘加密的项目,时间就这么过去了。等回过神来,发现写博客的计划又往后拖了。
下定决心,我想在这周搞定编译环境。
以前我是在XP下,使用UDK2010来编译的,比如这个:
图1 VS2008+UDK2010开发的uefi application
我原本的计划是用Ubuntu 16来搭建环境。最近正习惯在上面用vim和vscode编程,戒掉用了多年的UE和sublime。尝试了一天,总是遇到各种问题,特别是到现在也没有也没搞明白,GCC在安装过程中不知怎么变为了7.x。
这么下去,这周的计划又完成不了。我回到了用windows安装的老路,预备安装UDK2018。
还是折腾了一天,搞定了。把安装步骤和中途遇到的问题记录下来吧。
这是参考用的几个网址:
https://github.com/tianocore/edk2/releases
https://github.com/tianocore/tianocore.github.io/wiki/UDK2018-How-to-Build#how-to-build-windows-system
先吐槽一下,文档写得并不友好,我的时间全花在了编译Base Toosls上。实际上可以不用自己去编译Base Tools,直接下载就可以了。地址如下:
https://github.com/tianocore/edk2-BaseTools-win32
我是在读UDK2017的文档UDK2017 How to Build时发现的。
安装步骤(Win10下安装):
1. 安装 VS2015。我安装了图中所示的项,Python Tools for Visual Studio我觉得应该是不需要的,当时顺手选上了。
图2 VS2015的安装
2. 安装Python 2.7.16,同时选择将Python加入Path(安装的时候需要选择);
3. 安装Nasm 2.12.01,注意选择安装路径为C:\Nasm。在我的电脑-属性-高级系统设置-高级-环境变量…-系统变量-Path中添加此路径;
4. 安装Openssl工具和ASL工具(应该不需要,这是用来生成Base Tools用的);
5. 解压edk2-vUDK2018.zip到C:\MyWorkspace;
6. 添加系统变量PYTHON_HOME=c:\Python27;(补充一句,添加编译工具路径以及系统变量,可以在edksetup.bat中添加,比如:
Path = c:\nasm;%path%
Set PYTHON_HOME=c:\python27
这样就不需要像步骤3和6一样操作了,对我这种强迫症比较合适);
7. 打开“VS2015 x64 Native Tools Command Prompt”,运行edksetup.bat –nt32,会生成/Conf下所需的一些文件; 8. 执行build -p NT32Pkg\Nt32Pkg.dsc -a IA32 -t VS2015x86 run,启动SecMain.exe。
8. 执行build -p NT32Pkg\Nt32Pkg.dsc -a IA32 -t VS2015x86 run,启动SecMain.exe。
图3 UDK2018的模拟器
我的安装过程并不顺利,遇到了两个问题,记录如下:
问题1:python编译中找不到cxFreeze的module,无法通过编译。
解决:cmd打开,输入pip install cx_freeze。(注意Path中要包含Python的路径,否则无法执行)。
问题2:提示 File “GenFds\GenFds.py”, line 24, in <module>
ValueError: Attempted relative import in non-package
解决:将路径BaseTools\Bin\Win32下GenFds.exe更名为GenFds.LABZ,并将BaseTools\BinWrappers\WindowsLike;添加到Path路径中。
(此问题的解决参照http://www.lab-z.com/udk2018coming/和https://github.com/tzz1996/Blog/blob/master/compile_udk2018_in_windows.md,感谢!)
至此,终于可以继续探索UEFI了。明天开始将之前写过的例子一个个编译运行,加深理解。至于Ubuntu的开发环境,找时间再做吧。毕竟ubuntu更轻量级点,windows上光VS2015就占了12G。我都是在虚拟机下开发,这么多开发环境,空间严重不足了。
(20190512 20:40 Robin: Nt32Pkg是可以编译,可是AppPkg没有编译成功,目前没有找到原因,编译的问题在 UEFI开发探索05中列出,后面找时间再解决。暂时还是以我之前的UDK2010来编译吧)