LoginSignup
1
0

More than 3 years have passed since last update.

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

Posted at

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

【前回から】

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

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

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

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

【今回の目標】

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

【結果】

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

【必要なもの】

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

【手順】

1. MikanOSのリポジトリにある osbook_day02b タグのソース
 コードを入手する
 1) コマンドプロンプトを開く
 2) カレントディレクトリを C:\WinMikanOS\mikanos に移動する
  - cd C:\WinMikanOS\mikanos
 3) Gitで MikanOS の osbook_day02b タグのソースファイルを
   checkoutする
  - git checkout osbook_day02b
 4) コマンドプロンプトを閉じる
  - exit

2. このままビルドするとコンパイルエラーが発生するため(後述)、
 MikanLoaderパッケージの Main.c を変更する
 ・C:\MyWorkspace\MikanLoaderPkg\Main.c
  124行目をそのまま118行目あたりに移動する。
  - CHAR8 memmap_buf[4096 * 4];
  ※この処理をUefiMain()関数の外へ移動します。

3. 手順2.だけの対処では、ここで前回の「その4」で発生した
 リンクエラーが発生するため、MikanLoaderパッケージの
 MikanLoaderPkg.dsc を変更する
 ・C:\MyWorkspace\MikanLoaderPkg\MikanLoaderPkg.dsc (1か所)
  ファイルの末尾に以下の2行を追加する
  - [BuildOptions]
  - MSFT:*_*_*_CC_FLAGS = /wd4702

4. MikanLoaderパッケージをビルドする
 1) スタートメニュー の Visual Studio 2015 にある、
   「VS2015 x86 Native Tools コマンド プロンプト」を開く
 2) カレントディレクトリを C:\MyWorkspace に移動する
   - cd C:\MyWorkspace
 3) 以下の通り edksetup.bat を実行してビルド環境を準備する
   - edksetup --nt32 X64
 4) 以下の通り build clean を実行する
   - build clean
 5) 以下の通り build を実行して Loader.efi をビルドする
   - build

5. MikanLoaderパッケージ がビルドされたか確認する
 1) Loader.efi がビルドされたか確認する
   - dir C:\MyWorkspace\Build\MikanLoaderX64\DEBUG_VS2015x86\X64\Loader.efi

【紆余曲折】

・今回も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

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