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-