UEFI开发探索62 | 您所在的位置:网站首页 › edk2编译basetool › UEFI开发探索62 |
请保留-> 【原文: https://blog.csdn.net/luobing4365 和 http://yiiyee.cn/blog/author/luobing/】 开发UEFI代码的时候,起码有近三分之一的时间,在研究各种编译环境的搭建。从Windows到Linux,x86架构到Arm架构,甚至各种不同版本的EDK2,有时候着实让人无语。 之前的代码都在github上下载,速度慢得出奇,搭建好的环境一般也不想乱动。今年3月份,疫情期间,在家鼓捣着把github上与uefi相关的库,全部都导到了gitee上了。解决了下载速度的问题,总算可以不受限制地搭建开发环境了。 最近刚好遇到一个奇怪的问题,我怀疑与最新的EDK2不成熟有关,搭建了几个稳定版本进行实验,证实了自己的猜想。 现在搭建一个环境,大概只需要十几分钟。考虑到其他技术同好也可能遇到我这种需求,本篇博客就完整地探讨下如何安装各种EDK2的版本。 如图1,EDK2实际上准备了很多的分支和tags,可以根据自己的需求去下载。需要注意的是,我是把github上的EDK2和edk2-libc导入到了gitee上,作为私有仓库使用的。需要进行下面的各项操作,请首先完成这个步骤,具体可以参考我的这篇:https://blog.csdn.net/luobing4365/article/details/105658274。 ![]() 总体来说,搭建环境大致可以分为以下几个步骤: 1) 安装必要的开发工具,包括VS2015(或者其他VS编译器)、python、asl和nasm;2) 使用git下载edk2和edk2-libc(使用C标准库开发时必需);3) 更新edk2中的submodules;4) 重新编译BaseTools; 这些步骤完成后,就可以编写各类UEFI应用和驱动了。下面详细介绍操作过程。 1 开发工具的安装 在以前的博客中也介绍过安装过程,具体安装步骤可以参考以前的博客。各工具的下载地址如下: Python: https://www.python.org/ IASL: https://acpica.org/downloads/binary-tools Nasm: https://www.nasm.us/ 我使用的Python2.7,其他工具都是使用最新的版本。所有工具,都安装在C盘根目录下,方便后续写批处理,设置编译路径。以下是设置路径的批处理(setpath.bat)的内容: PATH=%PATH%c:\NASM;c:\iasl;set PYTHON_HOME=C:\Python27\set NASM_PREFIX=c:\NASM\ 2 下载edk2和edk2-libc Git工具非常好用,建议在windows上也安装一个。我经常使用WSL,所以是直接使用WSL(ubuntu 18)中的git工具的。 在C盘根目录下新建文件夹UefiWorkspace,将需要的edk2分支下载到此文件夹中: /mnt/c/UefiWorkspace$ git clone –branch edk2-stable202005 [email protected]:luobing4365/edk2.git 下载后,进入edk2文件夹中,可以用如下命令查看branch和tag,实际上就是图1中显示的: /mnt/c/UefiWorkspace/edk2$ git branch -a/mnt/c/UefiWorkspace/edk2$ git tag 下载edk2-libc /mnt/c/UefiWorkspace$ git clone [email protected]:luobing4365/edk2-libc.git 如果为了保持文件夹的独立性,是可以写个批处理来设置各种环境变量的。不过,我是简单处理的,把edk2-libc下的文件,全部拷贝到edk2中了。也即AppPkg、StdLib、StdLibPrivateInternalFiles三个文件夹,直接都拷贝到c:\UefiWorkspace\edk2\下了。 再次提醒,上述的git地址,全部是我自己的私有地址,没有账号和密码是无法使用的。建议先自己把edk2和edk2-libc的库,以及后面要用到的库,全部都导到gitee上,方便自己未来的开发。 3 更新edk2的submodules 在edk2的目录下,有个名为.gitmodules的文件,这是用来更新子模块的git文件。从edk2的开发更新日志来看,后续很多与开发工具相关的,比如OpenSSL、brotli等,都是通过这种方式来进行配置的。 相比而言,以前是需要下载openssl,再拷贝到相应目录,这种方式简单得多。 首先修改.gitmodules文件中的内容,它指定了各种库在github上的下载地址,把这些地址改为自己的仓库地址(再提醒:先把github上相应的库导入到gitee上,否则等待下载的时间会让你怀疑人生的) [submodule “CryptoPkg/Library/OpensslLib/openssl”] path = CryptoPkg/Library/OpensslLib/openssl url = [email protected]:luobing4365/openssl.git[submodule “SoftFloat”] path = ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3 url = [email protected]:luobing4365/berkeley-softfloat-3.git[submodule “UnitTestFrameworkPkg/Library/CmockaLib/cmocka”] path = UnitTestFrameworkPkg/Library/CmockaLib/cmocka url = [email protected]:luobing4365/cmocka.git[submodule “MdeModulePkg/Universal/RegularExpressionDxe/oniguruma”] path = MdeModulePkg/Universal/RegularExpressionDxe/oniguruma url = [email protected]:luobing4365/oniguruma.git[submodule “MdeModulePkg/Library/BrotliCustomDecompressLib/brotli”] path = MdeModulePkg/Library/BrotliCustomDecompressLib/brotli url = [email protected]:luobing4365/brotli.git[submodule “BaseTools/Source/C/BrotliCompress/brotli”] path = BaseTools/Source/C/BrotliCompress/brotli url = [email protected]:luobing4365/brotli.git ignore = untracked 然后在edk2的目录下,使用git命令更新: /mnt/c/UefiWorkspace/edk2$ git submodule update –init 执行完这次之后,以后再更新时,就不用加“–init”参数了。 4 重新编译BaseTools 打开“VS2015 x86 Native Tools Command Prompt”,提醒下,这里是x86,不是x64,我曾经选错过一次,浪费了十几分钟,一直疑惑为什么编译会出问题。 进入edk2的目录,执行之前的编译工具设定的批处理,然后重编译BaseTools。 C:\UefiWorkspace\edk2>setpath.bat C:\UefiWorkspace\edk2>edksetup.bat Rebuild 至此,完成所有的搭建工作了。 5 尾声 在搭建过程中,我也使用了最新的edk2编译程序(2020.7.6)。发现存在两个问题: 一是编译信息出现乱码。这个问题可以通过修改活动代码页解决,使用命令“chcp 437”,将活动代码页改为“OEM-美国”就可以了。原来的代码页是936,这是GB2312编码,导致了上述问题。 二是编译C++的UEFI程序。发现在生成的Makefile文件中,除了主程序所在的源文件外,其他源文件的obj生成规则,都没有指定。 第二个问题,我至今没有找到问题所在。从edk2提供的编译出来文件来看,有一个生成Makefile的py程序,所牵扯到的细节实在太多,还没仔细去研究。 嗯,总之,从结果来说,还是最好用稳定版本的软件,最新的稳定版本是edk2-stable202005(本文写于20200707)。 (本篇规划的时候,是准备续接第22篇写的。不过后来发现,第57篇也写了如何使用edk2搭建编译环境。这篇的重心在于,如何针对edk2不同的分支进行环境搭建,实际上是第57篇的后续了。) 5,083 total views, 1 views today |
CopyRight 2018-2019 实验室设备网 版权所有 |