3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ゼロからのOS自作入門 第2章

Last updated at Posted at 2021-06-16

ゼロからの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を無理やり削除してコンパイルした。

BaseTools/Source/C/Makefiles/header.makefile
 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が出来上がりました。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?