引き続き
Mac で始める「ゼロからのOS自作入門」 - yamoridon - Qiita
の記事を見ながら実行していきます。

4.3 C++の機能を使って書き直す(osbook_day04c)

day04c は、ターミナルの操作としては、day04b と変わりません。

% cd $HOME/workspace/mikanos/kernel
% git checkout osbook_day04c

※ファイルを自分で変更していると、git checkout コマンドで
error: Your local changes to the following files would be overwritten by checkout
というエラーが出ます。変更を廃棄してもいいのなら、
% git reset --hard
これで、チェックアウトできるようになります。


カーネル用のMakefile($HOME/workspace/mikanos/kernel/Makefile)を修正します。
day04aの記事と同じく、LDFLAGS に -z separate-code に追加します。
※ Makefile の修正はこれ以降もずっと、Macでは同じく必要です。 
LDFLAGS  += --entry KernelMain -z norelro --image-base 0x100000 --static -z separate-code

修正したら、カーネルファイルをmakeします。
% source $HOME/osbook/devenv/buildenv.sh

% make


続いて、ブートローダです。
$HOME/workspace/mikanos/MikanLoaderPkg/Main.c を修正します。
※ Makefile の修正はこれ以降もずっと、Macでは同じく必要です。
typedef void EntryPointType(const struct FrameBufferConfig*);

typedef void __attribute__((sysv_abi)) EntryPointType(const struct FrameBufferConfig*);
に修正します。
修正ポイントは、day03cの記事と基本的には同じ箇所になります。


修正したら、ブートローダをビルドします。
% cd $HOME/edk2

% source edksetup.sh

% build


それでは、QEMUで実行してみます。(長いですがコマンドプロンプトの% を除いて1行です。)
% $HOME/osbook/devenv/run_qemu.sh $HOME/edk2/Build/MikanLoaderX64/DEBUG_CLANGPDB/X64/Loader.efi $HOME/workspace/mikanos/kernel/kernel.elf


day04c


左上に緑色の四角が描かれました!




ゼロからのOS自作入門
内田公太
マイナビ出版
2021-03-22