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 もサポートに入っているので、実機でも試してみたいところです。
コメント