Windows で MikanOS (その5:MikanLoaderを更新してビルド)

お疲れ様です！いつもお世話になっております。！！
とうとう5回目になりました！今回もどうぞよろしくお願いいたします！！！

#【前回から】
前回の「その4」では MikanOSのとかっかり(と思っている) 
MikanLoader パッケージをビルドしました。

"みかん本" の章が進むにつれて、ちょっとずつ何かしないと
ビルドできなかったり、動作確認がしにくかったりしてきて
いるような気がします。

そこが面白いところでもあるので、もう少しだけこのまま
進めたいと思います。

エラーが出るところも、あえてエラーを出してみるのが
面白いかなとも思っています。


#【今回の目標】
・"みかん本" の「2.5章 メモリマップの取得(osbook_day02b)」を
　Windows環境でビルドする。


#【結果】
！ビルドできました！
今回はソースファイルにもちょっとだけ手を加えました。


#【必要なもの】
・「その4」で記載した「【必要なもの】」一式


#【手順】

<DL><DD>
1. MikanOSのリポジトリにある osbook_day02b タグのソース<BR>
　コードを入手する<BR>
　1) <B>コマンドプロンプトを開く</B><BR>
　2) カレントディレクトリを C:\WinMikanOS\mikanos に移動する<BR>
　　- <B>cd C:\WinMikanOS\mikanos</B><BR>
　3) Gitで MikanOS の osbook_day02b タグのソースファイルを<BR>
　　 checkoutする<BR>
　　- <B>git checkout osbook_day02b</B><BR>
　4) コマンドプロンプトを閉じる<BR>
　　- <B>exit</B><BR>
<BR>
2. このままビルドするとコンパイルエラーが発生するため(後述)、<BR>
　MikanLoaderパッケージの Main.c を変更する<BR>
　・C:\MyWorkspace\MikanLoaderPkg\Main.c<BR>
　　124行目をそのまま118行目あたりに移動する。<BR>
　　- <B>  CHAR8 memmap_buf[4096 * 4];</B><BR>
　　※この処理をUefiMain()関数の外へ移動します。<BR>
<BR>
3. 手順2.だけの対処では、ここで前回の「その4」で発生した<BR>
　リンクエラーが発生するため、MikanLoaderパッケージの<BR>
　MikanLoaderPkg.dsc を変更する<BR>
　・C:\MyWorkspace\MikanLoaderPkg\MikanLoaderPkg.dsc (1か所)<BR>
　　ファイルの末尾に以下の2行を追加する<BR>
　　- <B>[BuildOptions]</B><BR>
　　- <B>MSFT:*_*_*_CC_FLAGS = /wd4702</B><BR>
<BR>
4. MikanLoaderパッケージをビルドする<BR>
　1) スタートメニュー の Visual Studio 2015 にある、<BR>
　　 <B>「VS2015 x86 Native Tools コマンド プロンプト」を開く</B><BR>
　2) カレントディレクトリを C:\MyWorkspace に移動する<BR>
　　 - <B>cd C:\MyWorkspace</B><BR>
　3) 以下の通り edksetup.bat を実行してビルド環境を準備する<BR>
　　 - <B>edksetup --nt32 X64</B><BR>
　4) 以下の通り build clean を実行する<BR>
　　 - <B>build clean</B><BR>
　5) 以下の通り build を実行して Loader.efi をビルドする<BR>
　　 - <B>build</B><BR>
<BR>
5. MikanLoaderパッケージ がビルドされたか確認する<BR>
　1) Loader.efi がビルドされたか確認する<BR>
　　 - <B>dir C:\MyWorkspace\Build\MikanLoaderX64\DEBUG_VS2015x86\X64\Loader.efi</B><BR>
</DD></DL>


#【紆余曲折】
・今回もMikanLoaderパッケージのオリジナルのソースのままで
　ビルドをするとエラーとなります。
　今回は先にコンパイルエラーが3つ出ると思います。
　(1) c:\myworkspace\MikanLoaderPkg\Main.c(125)
　　　error C2220: 警告をエラーとして扱いました。'object' ファイルは生成されません。
　(2) c:\myworkspace\MikanLoaderPkg\Main.c(125)
　　　warning C4221: 非標準の拡張機能が使用されています:
　　　 'buffer': 自動変数 'memmap_buf' のアドレスを使った初期化はできません。
　　　c:\myworkspace\MikanLoaderPkg\Main.c(124)
　　　note: 'memmap_buf' の宣言を確認してください
　(3) c:\myworkspace\MikanLoaderPkg\Main.c(125)
　　　warning C4204: 非標準の拡張機能が使用されています: 定数でない初期化子の集合です。
　(2)も(3)も原因は「非標準の拡張機能使用されています。」とあり、
　このワーニングを抑制する方法で対処でもよいのですが、上記の
　手順に記載した方法で対処することとしました。
　※ここだけの処理になると思いましたので、関数内部にバッファを
　　用意してそのポインタを使用するのではなく、外部変数として
　　バッファを用意してそのポインタを使用しました。
　　正式には ヒープでメモリを確保するところでしょうけれど、
　　今回はまぁいいでしょう笑
・はじめはコンパイルオプション /Ze で対処できるかと思ったの
　ですが甘かったです。
　/Ze を付けてもコンパイラーには非推奨とさんざん言われ、
　エラーも消えませんでした。


#【次回の目標】
・"みかん本" の「2.7章 メモリマップの確認」を Windows環境 で行う。
にしようと思います。


#【参考とか引用とか】
・「コンパイラの警告 (レベル 4) C4221」について
　https://docs.microsoft.com/ja-jp/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4221?view=msvc-160
・「コンパイラの警告 (レベル 4) C4204」について
　https://docs.microsoft.com/ja-jp/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4204?view=msvc-160
・「/Za、/Ze (言語拡張機能の無効化)」について
　https://docs.microsoft.com/ja-jp/cpp/build/reference/za-ze-disable-language-extensions?view=msvc-160