edk2 の Emulator を動かす

だいぶ前に買った Mikan 本の OS開発をするにあたり、edk2 環境を作った。 とりあえずエミュレータを動かしてみた。本と異なり edk2 は最新のものでやってみることにした。

2025-1-28 追記: BaseTools をビルドする必要があったのでそれを追加。

環境
OS: Liux Mint 22 (upstream: Ubuntu24.02)
GCC: 13.2.0
edk2 は b437b5C (2024-9-7にこの記事は作成してます。)

; インストールとモジュールのアップデート
$ git clone https://github.com/tianocore/edk2
$ cd edk2
$ git submodule update --init --recursive

; エミュレータを動かすには lixb11-dev が必要らしい
 $ sudo apt install libx11-dev

; ビルド
$ source edksetup.sh

; まずは BaseTools をビルド
$ make -C BaseTools

; エミュレータビルド
$ build -p EmluatorPkg/EmulatorPkg.dsc  -t GCC -a X64 

; エミュレータの実行、Host があるディレクトリで実行する必要がある。oo
$ cd Build/EmulatorX64/DEBUG_GCC5/X64/
$ ./Host

build 実行時のパラメータは edk2/Config フォルダの target.txt に記述してもいい。

ACTIVE_PLATFORM    = EmulatorPkg/EmulatorPkg.dsc
TARGET_ARCH           = X64
TOOL_CHAIN_TAG    = GCC

TARGET_ARCH や TOOL_CHAIN_TAG は Conf デイレクトリの tools_def.txt に例があるのでそこから取ってくる。 以前までは TOOL_CHAIN_TAG に GCC5 を指定したようだが deprecate なので GCC となるらしい。(EmulatorPkg の Readme.md にあるのだが、GCC でないとビルドできないらしい。clang で頑張っても無駄なので素直に諦める。)

実行するには、Build ディレクトリに移動する必要があるようだ。

公式のやり方は、 build.sh run とかで実行できるとあるがオレカンでは何故か実行できないようです。

$ cd Build/EmulatorX64/DEBUG_GCC5/X64
$ ./Host

実行するとコンソールの画面出力がおかしくなるのでそこは注意。

これから Mikan 本をなぞっていくが TOOL_CHAIN_TAG CLANG8 から CLANGDWARF に変更するといいらしい。

参考

EmulatorPkg · tianocore/tianocore.github.io Wiki
– ここに、 Ubuntu の依存ライブラリの記述あり、 EmulatorPkg/build.sh run では動作しなかった。

edk2/EmulatorPkg at master · tianocore/edk2
– ここの起動方法に従うとと動作した。

EDK II (最新版) のツールチェーンに大幅な仕様変更が入っています · Issue #147 · uchan-nos/os-from-zero
– ここに Mikan 本での Toolchain についてのイシューレポートがある。