EDK2开发环境搭建

EDK2开发环境搭建

来源 https://blog.csdn.net/rikeyone/article/details/80759724

EDK2全称为“uEFI Development Kit”,是intel开源的一套符合UEFI标准的实现。

edk2环境搭建

代码下载

git clone https://github.com/tianocore/edk2.git

安装编译环境
sudo apt-get install build-essential uuid-dev nasm

edk2编译:命令行编译

1.编译base tool
export WORKSPACE=dir/to/edk2
make -C $WORKSPACE/BaseTools

2.初始化编译环境
cd $WORKSPACE
source edksetup.sh

3.命令行编译platform pkg
build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a X64 -b DEBUG -t GCC5 -D BUILD_64 -D UNIX_SEC_BUILD -n 3
option说明:
-p PLATFORMFILE: 目标平台描述文件
-a TARGETARCH: 目标平台X64/IA32
-b BUILDTARGET: 可选项(DEBUG, RELEASE, NOOPT),将只编译dsc文件中特定的模块
-m MODULEFILE: 编译目标module
-t TOOLCHAIN : 使用目标编译器编译
-n THREADNUMBER : 多线程编译
-D MACROS: Macro格式: “Name [= Value]”,传入宏定义

edk2编译 :配置文件编译

除了上面介绍的命令行,可以通过配置文件来编译目标,对应的配置文件目录在edk2/Conf中:

Linux@x86_64: ~/edk2 $ ls Conf/
BuildEnv.sh build_rule.txt target.txt tools_def.txt

target.txt 文件内容

#
#  Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
#
#  SPDX-License-Identifier: BSD-2-Clause-Patent
#
#
#  ALL Paths are Relative to WORKSPACE

#  Separate multiple LIST entries with a SINGLE SPACE character, do not use comma characters.
#  Un-set an option by either commenting out the line, or not setting a value.

#
#  PROPERTY              Type       Use         Description
#  ----------------      --------   --------    -----------------------------------------------------------
#  ACTIVE_PLATFORM       Filename   Recommended Specify the WORKSPACE relative Path and Filename
#                                               of the platform description file that will be used for the
#                                               build. This line is required if and only if the current
#                                               working directory does not contain one or more description
#                                               files.
ACTIVE_PLATFORM       = EmulatorPkg/EmulatorPkg.dsc

#  TARGET                List       Optional    Zero or more of the following: DEBUG, RELEASE, NOOPT
#                                               UserDefined; separated by a space character.
#                                               If the line is missing or no value is specified, all
#                                               valid targets specified in the platform description file
#                                               will attempt to be built. The following line will build
#                                               DEBUG platform target.
TARGET                = DEBUG

#  TARGET_ARCH           List       Optional    What kind of architecture is the binary being target for.
#                                               One, or more, of the following, IA32, IPF, X64, EBC, ARM
#                                               or AArch64.
#                                               Multiple values can be specified on a single line, using
#                                               space characters to separate the values.  These are used
#                                               during the parsing of a platform description file,
#                                               restricting the build output target(s.)
#                                               The Build Target ARCH is determined by (precedence high to low):
#                                                 Command-line: -a ARCH option
#                                                 target.txt: TARGET_ARCH values
#                                                 DSC file: [Defines] SUPPORTED_ARCHITECTURES tag
#                                               If not specified, then all valid architectures specified
#                                               in the platform file, for which tools are available, will be
#                                               built.
TARGET_ARCH           = IA32

#  TOOL_DEFINITION_FILE  Filename  Optional   Specify the name of the filename to use for specifying
#                                             the tools to use for the build.  If not specified,
#                                             WORKSPACE/Conf/tools_def.txt will be used for the build.
TOOL_CHAIN_CONF       = Conf/tools_def.txt

#  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        = VS2015x86

# MAX_CONCURRENT_THREAD_NUMBER  NUMBER  Optional  The number of concurrent threads. If not specified or set
#                                                 to zero, tool automatically detect number of processor
#                                                 threads. Recommend to set this value to one less than the
#                                                 number of your computer cores or CPUs. When value set to 1,
#                                                 means disable multi-thread build, value set to more than 1,
#                                                 means user specify the thread number to build. Not specify
#                                                 the default value in this file.
# MAX_CONCURRENT_THREAD_NUMBER = 1


# BUILD_RULE_CONF  Filename Optional  Specify the file name to use for the build rules that are followed
#                                     when generating Makefiles. If not specified, the file:
#                                     WORKSPACE/Conf/build_rule.txt will be used
BUILD_RULE_CONF = Conf/build_rule.txt

1.编译base tool
export WORKSPACE=dir/to/edk2
make -C $WORKSPACE/BaseTools

2.初始化编译环境
cd $WORKSPACE
source edksetup.sh

本步骤把build命令加入的环境变量中之外,还会生成默认的Conf文件,我们需要根据自己的需要重新配置对应文件。

3.配置target.txt
ACTIVE_PLATFORM = EmulatorPkg/EmulatorPkg.dsc
TARGET = DEBUG
TARGET_ARCH = X64
TOOL_CHAIN_TAG = GCC5
MAX_CONCURRENT_THREAD_NUMBER = 9
BUILD_RULE_CONF = Conf/build_rule.txt

4.开始编译
Linux@x86_64: ~/edk2 $ build -D BUILD_64 -D UNIX_SEC_BUILD

通过配置文件的方式,大大简化了命令行的输入,如果命令行传入了相同的配置参数,则会覆盖配置文件target.txt中的定义。

edk2编译清除:

清除BaseTool
Linux@x86_64: ~/edk2 $ make -C BaseTools clean

清除目标板编译文件
build clean
build cleanall

Emulator模拟器运行

EmulatorPkg/build.sh run

============== End

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

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