EDK2 Ubuntu Build Note

/ Linux

EDK2

Ubuntu 20.04でのQEMU用x64/aarch64ビルド方法

Environment

sudo apt install build-essential git python2 uuid-dev nasm
sudo apt install gcc-aarch64-linux-gnu
export GCC5_AARCH64_PREFIX=aarch64-linux-gnu-

Download

git clone https://github.com/tianocore/edk2.git && cd edk2
git submodule update --init --recursive

Build

make -C BaseTools
source edksetup.sh
build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtQemu.dsc -q
build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtKernelQemu.dsc -q
build -a X64 -t GCC5 -p OvmfPkg/OvmfPkgX64.dsc -q

下記のエラーが出る場合

edk2/Build/OvmfX64/RELEASE_GCC5/X64/MdePkg/Library/BaseLib/BaseLib/OUTPUT/X64/LongJump.iii:44: error: parser: instruction expected
edk2/Build/OvmfX64/RELEASE_GCC5/X64/MdePkg/Library/BaseLib/BaseLib/OUTPUT/X64/LongJump.iii:49: error: parser: instruction expected

nasmのバージョンが低い。

wget http://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.xz
tar -xf nasm-2.15.05.tar.xz nasm-2.15.05/
cd nasm-2.15.05
./configure --prefix=/usr && make
sudo make install
nasm --version

2.15.05と出ればOK。失敗時のバージョンはaptでインストールされる2.14.02だったはず。

Qemu

次のようにしてコンパイルしたコードの動きを確認できる。RELEASEビルドだと全然何も出ない。

 qemu-system-aarch64 -machine virt -cpu cortex-a53 -nographic -no-reboot -bios Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/FV/QEMU_EFI.fd

ビルド用Dockerfile

aptはキャッシュを使う。

# syntax = docker/dockerfile:1.2

FROM ubuntu:22.04

RUN --mount=type=cache,target=/var/cache/apt \
    rm -f /etc/apt/apt.conf.d/docker-clean && \
    apt update && TZ=US DEBIAN_FRONTEND=noninteractive \
    apt install -y \
    build-essential \
    git \
    uuid-dev \
    iasl \
    python-is-python3 \
    python3 \
    python3-setuptools \
    gcc-aarch64-linux-gnu \
    wget autoconf automake \
    && rm -rf /var/lib/apt/lists/*

RUN cd /tmp && wget https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/nasm-2.16.03.tar.bz2 && \
    tar xjvf nasm-2.16.03.tar.bz2 && \
    cd nasm-2.16.03 && \
    ./autogen.sh && \
    ./configure && \
    make -j $(nproc) && \
    make install && \
    make clean && rm -rf /tmp/*

ENV GCC5_AARCH64_PREFIX=aarch64-linux-gnu-

References