UEFI의 표준 오픈소스 구현체인 Tianocore EDK 2의 빌드 방법을 정리한다.
깃허브 레포: https://github.com/tianocore/edk2
환경: WSL2 (Ubuntu 24.04 LTS)
타겟 버전: edk2-stable202102
빌드 타겟: OVMF (Open Virtual Machine Firmware)
0. 의존성 패키지 설치
sudo apt update
sudo apt install build-essential uuid-dev iasl git gcc-5 nasm python3-distutils
빌드를 시작하기 전에 필요한 도구들을 먼저 설치한다. nasm은 어셈블리 컴파일러이며, iasl은 ACPI 컴파일러이다. 또한 uuid-dev는 고유 ID 생성을 위한 라이브러리이다.
1. 깃허브 클론
git clone https://github.com/tianocore/edk2.git
cd edk2
git checkout edk2-stable202102
git submodule update --init --recursive
먼저 edk2를 클론 후 목표하는 202102 버전으로 checkout을 한다. EDK 2는 OpenSSL, Brotli 등 외부 라이브러리를 많이 사용하므로, 이에 해당하는 submodule을 반드시 업데이트 해줘야 한다.
2. (옵션) 컴파일러 버전 변경
// 시스템 컴파일러를 9.x 버전으로 만든다.
sudo apt update
sudo apt install gcc-9 g++-9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 100
// 아래는 원래대로 복구하기 위한 코드
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
최신 리눅스 배포판의 GCC 버전이 너무 높으면, 구버전 소스코드인 edk2-stable202102 빌드 시 경고가 에러로 처리(-Werror)되어 빌드가 중단될 수 있다. 소스코드를 일일이 수정하거나 경고 옵션을 끄는 것보다, 당시 환경과 유사한 GCC 버전을 사용하는 것이 가장 빠르고 확실한 해결책이다. (삽질 후 얻은 결론 ㅎㅎ..)
3. BaseTools 컴파일
make -C BaseTools
BaseTools는 EDK 2 빌드 시스템의 핵심 도구 모음이다. .dsc, .dec, .inf 같은 설정 파일들을 파싱하고 펌웨어 이미지를 생성하는 역할을 한다. 이 도구들은 C언어와 Python으로 이루어져 있으므로, 전체 펌웨어를 빌드하기 전에 make 명령어를 통해 호스트 시스템에 맞는 실행 파일로 컴파일해야 한다.
4. edksetup.sh 실행
source edksetup.sh
edksetup.sh는 빌드 환경 변수를 설정해주는 스크립트이다. 실제 빌드를 진행하기 위한 WORKSPACE 경로 설정과, build 명령어를 터미널에서 바로 사용할 수 있도록 환경을 잡아주기 위해 실행한다. (새로운 터미널을 열 때마다 실행해줘야 함)
5. 빌드
build --platform=OvmfPkg/OvmfPkgX64.dsc --arch=X64 --buildtarget=RELEASE --tagname=GCC5
기본 세팅이 마무리되면 빌드를 진행한다.
- --platform: 생성할 펌웨어 패키지의 설정 파일(DSC) 경로를 지정한다. 여기서는 가상머신용 펌웨어인 OVMF를 빌드한다.
- --arch: 대상 아키텍처를 지정한다. (X64, IA32, ARM 등)
- --buildtarget: 빌드 목표를 설정한다. 디버깅 정보가 포함된 DEBUG 또는 최적화된 RELEASE를 선택할 수 있다.
- --tagname: 사용할 툴체인 태그이다. GCC5라고 표기되어 있지만, 실제로는 GCC 5 버전 이상을 포괄적으로 지원하는 태그이므로 GCC 9 환경에서도 이 태그를 사용한다.
6. QEMU 실행
qemu-system-x86_64 -drive if=pflash,format=raw,file=Build/OvmfX64/RELEASE_GCC5/FV/OVMF.fd -nographic -net none
QEMU는 하드웨어 에뮬레이터이자 가상 머신 역할을 하는 프로그램이다. 리눅스에 설치가 안 되어 있다면 sudo apt install qemu-system-x86으로 설치하면 된다.
- -nographic: GUI 창을 띄우지 않고 터미널에서 텍스트 모드로 실행
- -net none: 네트워크 연결을 하지 않음

앞서 빌드를 통해 만들어진 펌웨어 이미지 파일(OVMF.fd)을 -drive if=pflash 옵션에 넣고 실행하면, 직접 만든 UEFI 펌웨어를 통해 가상머신이 정상적으로 부팅되는 것을 확인할 수 있다.
'CS > Graduation project' 카테고리의 다른 글
| CVE-2021-39297 분석 및 실습 (0) | 2026.02.14 |
|---|---|
| [UEFI] SetVariable() (0) | 2026.02.14 |
| [UEFI] EDK2를 활용한 Stack Buffer Overflow 실습 (0) | 2026.02.02 |
| SMM 권한 상승과 Secure Boot 우회 (CVE-2025-7026, 3052) (0) | 2026.01.26 |
| CVE-2023-45230: UEFI DHCPv6 드라이버 힙 오버플로우 (0) | 2026.01.19 |