[QEMU][boot] EDK2 aarch64 on QEMU

PC の BIOS にも採用されている UEFI の実装である EDK2 が aarch64(arm64) にも対応するようになってそこそこ経過していますが、手元で動かす機会があまりなかったので(今更ですが) QEMU 上で動かしてみることにします。

EDK II ?

EDK2 は UEFI (Unified Extensible Firmware Interface) の OpenSource 実装で、OS 起動前の bootloader や Hardware 初期化などの役割を担っています。TianoCore community によりメンテナンスされています。

準備

ビルドで使用するツールを事前に準備します。使用する Python とパッケージが Python のバージョンに依存するため、インストールできる distribution は新しい方が望ましいです。
※ Ubuntu18.04 は大丈夫でしたが、Ubuntu16.04 の場合 Python3.5.2 のため Python3.6 で対応する distutils がインストールできないため、そのままではハマります。

sudo apt install iasl python3 python3-distutils

toolchain は gcc5 以上が使えるように path を通しておきます。

clone & setup

ソースを clone しますが、常に update されるため stable tag を指定しておきます。

git clone https://github.com/tianocore/edk2.git
git checkout -b stable
git reset --hard edk2-stable202002

EDK2 を使う前のおまじないを実行します。

cd edk2
make -C BaseTools
. edksetup.sh
export GCC5_AARCH64_PREFIX=aarch64-linux-gnu-

ビルド

上記のおまじないで環境変数が設定されているので、"build" コマンドでビルドします。ここでは virt モデルの QEMU 設定をプラットフォームとして指定します。

build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtQemu.dsc

ビルドが完了するとイメージが Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/FV/QEMU_EFI.fd にできます。

virt モデルによる実行

以下にてモデルとイメージを指定して QEMU を実行します。

qemu-system-aarch64 -M virt -cpu cortex-a53 -M virt -bios QEMU_EFI.fd -nographic

そのままでは起動に1~2分かかるようです。起動ログを見ると PXEv4 を起動しているので、timeout を待っているような感じです。ブートが完了すると shell が起動します。

[Bds]Booting UEFI PXEv4 (MAC:525400123456)
>>Start PXE over IPv4InstallProtocolInterface:....

UEFI v2.70 (EDK II, 0x00010000)008-7F9B-4F30-87AC-60C9FEF5DA4E 43DED090
Mapping table
     BLK0: Alias(s):
          VenHw(93E34C7E-B50E-11DF-9223-2443DFD72085,00)
Press ESC in 1 seconds to skip startup.nsh or any other key to continue.
Shell>

FVP モデルなどでも試そうとしたのですが、メンテナンスされてないのか stable でもビルドエラーが起こったのである程度 upstream を追う必要があるかもしれません。また HiKey や RasPi もサポートに入っているので、実機でも試してみたいところです。


コメント

タイトルとURLをコピーしました