引き続き
・Mac で始める「ゼロからのOS自作入門」 - yamoridon - Qiita
day05a は、文字を書くために $HOME/workspace/mikanos/kernel/main.cpp を修正しています。
ただし、ターミナルの操作としては、day04b と変わりません。
※ファイルを自分で変更していると、git checkout コマンドで
カーネル用のMakefile($HOME/workspace/mikanos/kernel/Makefile)を修正します。
修正したら、カーネルファイルをmakeします。
続いて、ブートローダです。
$HOME/workspace/mikanos/MikanLoaderPkg/Main.c を修正します。
※ Makefile の修正はこれ以降もずっと、Macでは同じく必要です。
修正ポイントは、day03cの記事と基本的には同じ箇所になります。
修正したら、ブートローダをビルドします。
それでは、QEMUで実行してみます。(長いですがコマンドプロンプトの% を除いて1行です。)
文字が表示されるとうれしいですね!
・Mac で始める「ゼロからのOS自作入門」 - yamoridon - Qiita
の記事を見ながら実行していきます。
5.1 文字を書いてみる(osbook_day05a)
5.1 文字を書いてみる(osbook_day05a)
day05a は、文字を書くために $HOME/workspace/mikanos/kernel/main.cpp を修正しています。
ただし、ターミナルの操作としては、day04b と変わりません。
% cd $HOME/workspace/mikanos/kernel
% git checkout osbook_day05a
※ファイルを自分で変更していると、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
修正したら、カーネルファイルを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
文字が表示されるとうれしいですね!