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