1. 搭建EDK2开发环境
任务目标
在Ubuntu系统上完成EDK2开发环境搭建,编译一个最小的UEFI应用程序(HelloWorld),生成可加载的EFI可执行文件,并验证编译产物存在且格式正确。
环境与依赖
- Ubuntu 20.04/22.04(x86_64),需具备sudo权限
- 必需工具包:
build-essential、git、nasm、python3、uuid-dev - EDK2使用其自带的GCC工具链(基于系统gcc),无需额外安装交叉编译器
安装步骤
- 安装依赖包:
sudo apt update && sudo apt install -y build-essential git nasm python3 uuid-dev - 创建工作目录并克隆EDK2稳定分支(当前使用edk2-stable202405)
- 初始化子模块(EDK2依赖MdePkg、MdeModulePkg等子模块)
- 设置环境变量并激活编译环境
完整实现
以下命令序列完成环境搭建与最小应用编译。核心步骤为:克隆仓库、同步子模块、导入环境脚本、编译BaseTools、创建HelloWorld应用、编译生成EFI文件。
# 1. 安装依赖
sudo apt update
sudo apt install -y build-essential git nasm python3 uuid-dev
# 2. 克隆EDK2(稳定版)
cd ~
git clone https://github.com/tianocore/edk2.git -b edk2-stable202405
cd edk2
# 3. 初始化子模块(需数分钟,取决于网络)
git submodule update --init --recursive
# 4. 导入EDK2编译环境(每次新终端需重新执行)
source edksetup.sh
# 5. 编译BaseTools(EDK2构建工具链)
make -C BaseTools
# 6. 创建最小UEFI应用
mkdir -p MdePkg/Applications/HelloWorld
cat > MdePkg/Applications/HelloWorld/HelloWorld.c << 'EOF'
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/UefiApplicationEntryPoint.h>
EFI_STATUS
EFIAPI
UefiMain (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
Print (L"Hello EDK2!\r\n");
return EFI_SUCCESS;
}
EOF
cat > MdePkg/Applications/HelloWorld/HelloWorld.inf << 'EOF'
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = HelloWorld
FILE_GUID = 8D0E2C1A-2F5B-4E6A-9C3D-7B8A1F2E4C5D
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 1.0
ENTRY_POINT = UefiMain
[Sources]
HelloWorld.c
[Packages]
MdePkg/MdePkg.dec
[LibraryClasses]
UefiApplicationEntryPoint
UefiLib
EOF
# 7. 在target.txt中启用HelloWorld模块编译
cat >> Conf/target.txt << 'EOF'
ACTIVE_PLATFORM = MdePkg/MdePkg.dsc
TARGET_ARCH = X64
TOOL_CHAIN_TAG = GCC5
EOF
# 8. 编译(生成Build/MdePkg/DEBUG_GCC5/X64/HelloWorld.efi)
build -m MdePkg/Applications/HelloWorld/HelloWorld.inf
关键说明:edksetup.sh会生成Conf/target.txt等配置文件;步骤7中通过追加配置指定了平台、架构与工具链。若Conf目录不存在,先执行source edksetup.sh生成。编译输出路径为Build/MdePkg/DEBUG_GCC5/X64/HelloWorld.efi。
验证方法
- 编译产物存在:检查
Build/MdePkg/DEBUG_GCC5/X64/HelloWorld.efi文件是否生成,文件大小应大于0字节。 - PE32+格式确认:执行
file Build/MdePkg/DEBUG_GCC5/X64/HelloWorld.efi,输出应包含PE32+ executable (EFI application) x86-64字样,证明是有效的UEFI可执行文件。 - (可选)QEMU运行验证:若已安装
qemu-system-x86_64和OVMF,可创建FAT格式磁盘镜像放入该EFI文件,用UEFI Shell执行验证输出Hello EDK2!。此步骤非必需,编译产物格式正确即可判定环境搭建成功。
通过条件:步骤1和2均满足,即EFI文件生成且被file命令识别为x86-64的PE32+ EFI应用,则环境搭建与编译链路验证通过。