2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu Desktop で OVMF と QEMU をソースコードからビルドする

Last updated at Posted at 2016-10-13

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 ではビルドできる可能性があります。

準備作業

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 ディレクトリを作成するので注意すること
efi_exec.sh
#!/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 キーを押すこと

Boot.PNG

  • この画面が表示されたら、↓ キーで EFI Internal Shell を選択し、Enter キーを押すこと

Select.PNG

  • EFI Shell が起動するので使ってみる

GTK ウインドウから離脱したい時は、Ctrl+Alt+G キーを 1 回押すこと。
Oracle VirtualBox から離脱したい時は、右 Ctrl キーを 1 回押すこと。

Shell.PNG

参考

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

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?