2025/6/07(土)時点での EDK II と QEMU の HEAD をビルドして使ってみた時のメモです。
注意点
2025/6/07(土)時点のコードをビルドする場合には、git show コマンドで表示されている版に git checkout してください。
EDK II のビルドですが、Docker の次に推奨されているのが Stuart です。Stuart を使うことでビルド環境が整い、従来からある build コマンドを円滑に使えるようになります。
stuart_ci_build コマンドの実行で、cspell の警告が出力されますが、この記事では cspell の npm install は行いません。nodenv を利用することで、Node.js のバージョンを調整するなどすれば使えるはずですが、試していません。
作業環境
Ubuntu Desktop 24.04 LTS 等では、Oracle VirtualBox 上でのインストール中にフリーズしたり、インストーラの画面が大きすぎて Oracle VirtualBox のウインドウに収まらずボタンが押せなかったりと、いろいろと不都合があるため、代替環境として Linux Mint 22.1 を使います。
そのため、Ubuntu Desktop 24.04 LTS は未検証ですが、WSL(Ubuntu 24.04.2 LTS)でのビルドは確認済みです。Oracle VirtualBox 以外の仮想環境や、PC に直接インストールした Ubuntu Desktop 24.04 LTS ではビルドできる可能性があります。
- Windows 11
- Oracle VirtualBox 7.1.8 (仮想ストレージ 20 GB 以上)
Downloads – Oracle VirtualBox
https://www.virtualbox.org/wiki/Downloads - Linux Mint 22.1
Download Linux Mint 22.1 - Linux Mint
https://www.linuxmint.com/download.php
準備作業
Linux Mint を Oracle VirtualBox にインストールし、Terminal から以下のコマンドを投入。ビルドエラーになった場合に、「apt-file search ファイル名」でパッケージを探せるようにするため。
$ sudo apt update && sudo apt upgrade -fy && sudo apt autoremove -fy
$ sudo apt install -fy apt-file && sudo apt-file update
Oracle VirtualBox で Linux Mint の仮想マシンのスナップショットを作成し、Linux Mint をシャットダウンすること。Linux Mint の仮想マシンをクローンし、クローンした仮想マシンを起動。Terminal を開くこと。
EDK II の OvmfPkg をビルドする
- Terminal から以下のコマンドを投入する。同じ版を試したい場合は、git checkout すること
$ cd ~
$ sudo apt install -fy python3 python3-pip python3-venv git mono-complete make uuid-dev nasm iasl nodejs
$ wget https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
$ mono nuget.exe install
$ python3 -m venv .venv_edk2
$ source .venv_edk2/bin/activate
(.venv_edk2) $ pip install --upgrade edk2-pytool-extensions
(.venv_edk2) $ git clone https://github.com/tianocore/edk2.git
(.venv_edk2) $ cd edk2
(.venv_edk2) $ git show -s --format=%H
431da739a0a45882f2b4e703ba2bca5583914646
(.venv_edk2) $ pip install -r pip-requirements.txt --upgrade
(.venv_edk2) $ stuart_setup --platform_module .pytool/CISettings.py --pkg-dir OvmfPkg --arch X64 TOOL_CHAIN_TAG=GCC5
(.venv_edk2) $ python3 BaseTools/Edk2ToolsBuild.py -t GCC5
(.venv_edk2) $ stuart_update --platform_module .pytool/CISettings.py --pkg-dir OvmfPkg --arch X64 TOOL_CHAIN_TAG=GCC5
(.venv_edk2) $ stuart_ci_build --platform_module .pytool/CISettings.py --pkg-dir OvmfPkg --arch X64 TOOL_CHAIN_TAG=GCC5
(.venv_edk2) $ . ./edksetup.sh
(.venv_edk2) $ build -a X64 -t GCC5 -p OvmfPkg/OvmfPkgX64.dsc
(.venv_edk2) $ cp -p Build/OvmfX64/DEBUG_GCC5/FV/OVMF_*.fd ~
(.venv_edk2) $ cd ..
QEMU をビルドする
- Terminal から以下のコマンドを投入する。同じ版を試したい場合は、git checkout すること
(.venv_edk2) $ pip install --upgrade sphinx sphinx_rtd_theme
(.venv_edk2) $ sudo apt install -fy ninja-build libglib2.0-dev flex bison libgtk-3-dev
(.venv_edk2) $ git clone https://gitlab.com/qemu-project/qemu.git
(.venv_edk2) $ cd qemu
(.venv_edk2) $ git show -s --format=%H
96215036f47403438c7c7869b7cd419bd7a11f82
(.venv_edk2) $ ./configure --target-list=x86_64-softmmu --enable-gtk
(.venv_edk2) $ make -j4
(.venv_edk2) $ sudo make install
(.venv_edk2) $ qemu-system-x86_64 --version
QEMU emulator version 10.0.50 (v10.0.0-1523-g96215036f4)
Copyright (c) 2003-2025 Fabrice Bellard and the QEMU Project developers
(.venv_edk2) $ cd ..
シェルスクリプトを準備する
- ホームディレクトリに以下のシェルスクリプトを作成する。chmod コマンドで実行可能属性を設定すること。ホームディレクトリに作業用の tmp_efi ディレクトリを作成するので注意すること
#!/bin/bash
IS_DBG=${1:-0}
mkdir -p $HOME/tmp_efi
if test $IS_DBG -eq 1
then
DBG="-gdb tcp::10000 -S"
else
DBG=""
fi
qemu-system-x86_64 \
-machine pc -net none -vga std -display gtk \
-drive if=pflash,readonly=on,file=OVMF_CODE.fd,format=raw \
-drive if=pflash,file=OVMF_VARS.fd,format=raw \
-drive format=raw,file=fat:rw:$HOME/tmp_efi \
-debugcon file:$HOME/tmp_efi/ovmf.log \
-global isa-debugcon.iobase=0x402 $DBG
- Oracle VirtualBox で Linux Mint の仮想マシンのスナップショットを作成すること
GTK で EFI Shell を使ってみる
- Terminal から以下のコマンドを投入する
$ ./efi_exec.sh
- この画面が表示されたら、Enter キーを押すこと
- この画面が表示されたら、↓ キーで EFI Internal Shell を選択し、Enter キーを押すこと
- EFI Shell が起動するので使ってみる
GTK ウインドウから離脱したい時は、Ctrl+Alt+G キーを 1 回押すこと。
Oracle VirtualBox から離脱したい時は、右 Ctrl キーを 1 回押すこと。
参考
Build Instructions · tianocore/tianocore.github.io Wiki
https://github.com/tianocore/tianocore.github.io/wiki/Build-Instructions
How to Build With Stuart · tianocore/tianocore.github.io Wiki
https://github.com/tianocore/tianocore.github.io/wiki/How-to-Build-With-Stuart