Ideal Reality

興味の赴くままに

QEMU用のUEFIファームウェアをビルドする

QEMUはUEFI用のファームウェアを持っていないので、UEFI環境でのブートをしたかったら別途用意しなきゃいけないのですが、Intel用のファームウェアはLinuxのパッケージマネージャーのレポジトリにあって使いにくかったり、ARM 64bit版はビルド済みのファームウェアがまともに配布されていなかったりするので、自前で用意しました。

Contents
スポンサーリンク

ビルド環境

Dockerのubuntu:20.04イメージを使います。

$ docker run -it --name "ovmf_build" ubuntu:20.04

必要なパッケージ

必要なパッケージをインストールします。

apt update
apt install -y build-essential
apt install -y git python uuid-dev
apt install -y nasm acpica-tools

また、もしx86_64のマシンでaarch64のUEFIファームウェアをビルドしようとしているなら、クロスコンパイラも必要になります。

apt install -y gcc-aarch64-linux-gnu
スポンサーリンク

ソースコードの入手

gitからダウンロードします。

masterだとビルド失敗することがあるのでstableブランチから取ってきます(※ 2021/12/19 加筆)

git clone https://github.com/tianocore/edk2.git -b stable/202011
cd edk2
git submodule update --init

ビルド

BaseToolsのビルド

make -C BaseTools

成功するとOKと出ます。

x86_64(AMD/Intel 64bit)

ビルド用のスクリプトがあるのでこちらを利用します。-n 4はマルチスレッド数なので、使っているCPUに合わせて適宜変更してください。

OvmfPkg/build.sh -a X64 -b RELEASE -n 4

ビルドが完了すればBuild/OvmfX64/RELEASE_GCC5/FV/OVMF.fdが生成されるので、Dockerを抜けたらdocker cpでホストOS上にコピーしましょう。

docker cp ovmf_build:/edk2/Build/OvmfX64/RELEASE_GCC5/FV/OVMF.fd .

i386(Intel 32bit)

こちらもビルド用のスクリプトがあります。

OvmfPkg/build.sh -a IA32 -b RELEASE -n 4

ビルドが完了すればBuild/OvmfIa32/RELEASE_GCC5/FV/OVMF.fdが生成されるので、Dockerを抜けたらdocker cpでホストOS上にコピーしましょう。

docker cp ovmf_build:/edk2/Build/OvmfIa32/RELEASE_GCC5/FV/OVMF.fd .

aarch64(ARM 64bit)

まずedkのパスを通します

source edksetup.sh

もしIntelマシンでビルドしようとしているなら、クロスコンパイラを指定してください。

export GCC5_AARCH64_PREFIX=aarch64-linux-gnu-

あとはビルドコマンドを叩けば大丈夫。

build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtQemu.dsc -b RELEASE -n 4

ビルドが完了すればBuild/ArmVirtQemu-AARCH64/RELEASE_GCC5/FV/QEMU_EFI.fdが生成されるので、Dockerを抜けたらdocker cpでホストOS上にコピーしましょう。

docker cp ovmf_build:/edk2/Build/ArmVirtQemu-AARCH64/RELEASE_GCC5/FV/QEMU_EFI.fd .
スポンサーリンク

お掃除

ビルドが終わって必要なファイルをコンテナ内から取り出したら、もうコンテナはいらないので消しましょう。

docker rm ovmf_build

まとめ

Apple Siliconの登場でARMの仮想化をすることも増えてくると思うので、一旦ファームウェアをビルドして手元に置いておくと便利です。

スポンサーリンク

参考

QEMUでARM64(AARCH644)のUEFIコンソールを実行する - /home/tnishinaga/TechMEMO

スポンサーリンク

コメント

投稿されたコメントはありません

名前

メールアドレス(任意)

コメント

関連する投稿

[Swift]Dictionaryに順番を持たせたい

NO IMAGE

QEMUでブリッジネットワークを使用する

Core i9 iMacのターボブーストの挙動

SELinux環境でのEWWW Image Optimizer

Raspberry Pi PicoでFreeRTOS+CLI

NO IMAGE

dnsmasqのdhcp-hostが効かない時の確認事項