引き続き実行していきます。
Macでの修正点は
・Mac で始める「ゼロからのOS自作入門」 - yamoridon - Qiita
day05d は、sprintfを実装するために $HOME/workspace/mikanos/kernel/main.cpp や font.cpp を修正しています。
ただし、ターミナルの操作としては、day05b と変わりません。
※ファイルを自分で変更していると、git checkout コマンドで
カーネル用のMakefile($HOME/workspace/mikanos/kernel/Makefile)を修正します。
さらに、上記記事の通りに
また、$HOME/workspace/mikanos/kernel/main.cpp に以下の記述を追加します。
(私の環境では、makeエラーは出なかったのですが、一応。)
※ Makefile、main.cpp の修正はこれ以降もずっと、Macでは同じく必要です。
修正したら、カーネルファイルをmakeします。
続いて、ブートローダです。
$HOME/workspace/mikanos/MikanLoaderPkg/Main.c を修正します。
※ Makefile の修正はこれ以降もずっと、Macでは同じく必要です。
修正ポイントは、day03cの記事と基本的には同じ箇所になります。
修正したら、ブートローダをビルドします。
それでは、QEMUで実行してみます。(長いですがコマンドプロンプトの% を除いて1行です。)

Hello, world!と、%dに値が埋め込まれて表示されました。
Macでの修正点は
・Mac で始める「ゼロからのOS自作入門」 - yamoridon - Qiita
の記事を参考にしています。
5.4 文字列描画とsprintf()(osbook_day05d)
5.4 文字列描画とsprintf()(osbook_day05d)
day05d は、sprintfを実装するために $HOME/workspace/mikanos/kernel/main.cpp や font.cpp を修正しています。
ただし、ターミナルの操作としては、day05b と変わりません。
% cd $HOME/workspace/mikanos/kernel
% git checkout osbook_day05d
※ファイルを自分で変更していると、git checkout コマンドで
error: Your local changes to the following files would be overwritten by checkoutというエラーが出ます。変更を廃棄してもいいのなら、
% git reset --hardこれで、チェックアウトできるようになります。
カーネル用のMakefile($HOME/workspace/mikanos/kernel/Makefile)を修正します。
LDFLAGS += --entry KernelMain -z norelro --image-base 0x100000 --static -z separate-code
さらに、上記記事の通りに
sed --in-place 's|$(notdir $(OBJ))|$(OBJ)|' $@を
sed -I '' -e 's|$(notdir $(OBJ))|$(OBJ)|' $@に変更します。
また、$HOME/workspace/mikanos/kernel/main.cpp に以下の記述を追加します。
(私の環境では、makeエラーは出なかったのですが、一応。)
extern "C" void __cxa_pure_virtual() {while (1) __asm__("hlt");}
※ Makefile、main.cpp の修正はこれ以降もずっと、Macでは同じく必要です。
修正したら、カーネルファイルを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

Hello, world!と、%dに値が埋め込まれて表示されました。