ゼロからのOS自作入門 第2章
いくつか独自に進めた部分のメモ
MikanLoaderPkgのシンボリックリンク
EDK2でEFIアプリをビルドするにはEDK2のWORKSPACE内にそのディレクトリがある必要があるために、本ではWORKSPACE内にシンボリックリンクを作成して、MikanLoaderPkgをその中に置くように見せかせている。
以下を少し読んだ感じだと、PACKAGES_PATH
環境変数があればその中を探してくれるということなので、それを使ってみた。
https://edk2-docs.gitbook.io/edk-ii-build-specification/4_edk_ii_build_process_overview/41_edk_ii_build_system
例えば、~/MikanOS/MikanLoaderPkg
にMain.cやdec,infファイル等をおいた場合、
$ export PACKAGES_PATH=~/MikanOS
としておけばシンボリックリンクは必要ない。
EDK2のバージョン
EDK2のリポジトリからファイルをgit clone https://github.com/tianocore/edk2
で持ってくるとmasterがチェックアウトされている。
何人かが指摘しているが、このままだとビルドがうまく行かない。
やることは大きく2つ。EDK2のディレクトリ内で以下のコマンドで特定のバージョンのチェックアウト及びSubmouleの取得を行う。
$ git checkout edk2-stable202011
$ git submodule init
BaseToolsのビルド
これがどこにも書かれていなかったので、もしかすると僕が見逃しているか、完全に本にそって手順を進めていないのでちょっと環境が違うとかかもしれないが、EDK2のリポジトリ内のBaseToolsを先にビルドする必要があった。EDK2のディレクトリ内で
$ make -C BaseTools
なお筆者のArch Linuxの環境(gcc version 11)ではWarningがでて、それがエラーとなってコンパイルエラーになってしまったので、以下のファイルから-Wall -Werror
を無理やり削除してコンパイルした。
94 BUILD_CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \
95 # -fno-delete-null-pointer-checks -Wall -Werror \
96 -fno-delete-null-pointer-checks \
97 -Wno-deprecated-declarations -Wno-stringop-truncation -Wno-restrict \
98 -Wno-unused-result -nostdlib -g
コンパイル環境に応じてifeq/endif
で囲まれているので自分の環境の場所を見つけて削除。(上の例では95行をコメントアウトして、96行目に-Wall -Werror
を削除したものを追加)
nasmのインストール
本に書いてある開発環境を無視してやっているので、nasmがなくてビルドに失敗した。Arch Linuxを使っているので以下でインストール
$ sudo pacman -S nasm
ほかは本に従って記述していくことでLoader.efiが出来上がりました。