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

スポンサーリンク

コメント

  1. value
    2023年9月23日 15時17分
    返信

    BWAB

  2. value’);SELECT PG_SLEEP(5)–
    2023年9月23日 15時17分
    返信

    BWAB

  3. value AND 9299=(SELECT 9299 FROM PG_SLEEP(5))
    2023年9月23日 15時18分
    返信

    BWAB

  4. value
    2023年9月23日 15時19分
    返信

    BWAB’)),((.,”)

  5. value
    2023年9月23日 15時20分
    返信

    BWAB ORDER BY 1– WTal

名前

メールアドレス(任意)

コメント

関連する投稿

highlight.jsに行番号をつける

Raspberry PiにAlpine Linuxをsysモードでインストールする

ブラウザがWebAssemblyに対応しているかどうかを、JavaScriptで確認する

SELinux環境でのEWWW Image Optimizer

[WordPress]メディアライブラリから画像を選べるカスタムフィールドを作成する

Font AwesomeをIcoMoonで軽量化する