0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Windows で MikanOS (その4:MikanLoaderのはじめてのビルド)

Posted at

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

【前回から】

前回の「その3」では EDK2(UDK2017)環境を構築しました。
今回は "みかん本" の「2.2章 EDK IIでハローワールド(osbook_day02a)」で
記載のある、「MikanLoader」を Windows環境でビルドしたいと思います。

Linux環境とのビルド環境の違いからか、ワーニングやエラーの
出方が変わるようで、 "みかん本" のオリジナルのソースのままでは
ビルドが成功しませんでした。

このあたりも後ほど説明したいと思います。
なお、"みかん本" の "付録B MikanOSの入手"もよく読んでおいて
ください。

【今回の目標】

・"みかん本" の「2.2章 EDK IIでハローワールド(osbook_day02a)」を
 Windows環境でビルドする。

【結果】

MikanLoaderパッケージの変更は必要でしたが、
!ビルドできました!

【必要なもの】

・「その3」で記載した「【必要なもの】」一式
・MikanOSのリポジトリにあるソースファイル

【手順】

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

2. EDK2(UDK2017)に MikanLoaderパッケージ のソースファイルを
 適用する
 ウィンドウズ標準のシンボリックリンク機能を使います。
 1) 管理者権限のあるコマンドプロンプトを開く
 2) 管理者権限のあるコマンドプロンプトで以下を入力する
  - mklink /d C:\MyWorkspace\MikanLoaderPkg C:\WinMikanOS\mikanos\MikanLoaderPkg
 3) 管理者権限のあるコマンドプロンプトを閉じる
  - exit

3. EDK2(UDK2017)にある target.txt を MikanLoaderパッケージ
 用に修正する
 1) お好みのテキストエディタで C:\MyWorkspace\Conf\target.txt
  を開く

 2) 以下の1か所を変更する。
  ACTIVE_PLATFORM = Nt32Pkg/Nt32Pkg.dsc
  -> ACTIVE_PLATFORM = MikanLoaderPkg/MikanLoaderPkg.dsc
 3) C:\MyWorkspace\Conf\target.txt を保存して、テキスト
  エディタを終了する

4. このままビルドするとリンクエラーが発生するため(後述)、
 MikanLoaderパッケージを変更する
 ・C:\MyWorkspace\MikanLoaderPkg\MikanLoaderPkg.dsc (1か所)
  ファイルの末尾に以下の2行を追加する
  - [BuildOptions]
  - MSFT:*_*_*_CC_FLAGS = /wd4702

5. 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

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

【紆余曲折】

・MikanLoaderパッケージのオリジナルのソースのままでビルドをすると
 リンクの際にエラーとなります。
 エラーの内容は以下の通りです。
 (1) c:\myworkspace\mdepkg\library\uefiapplicationentrypoint\applicationentrypoint.c(75)
   error C2220: 警告をエラーとして扱いました。'executable' ファイルは生成されません。
 (2) c:\myworkspace\mdepkg\library\uefiapplicationentrypoint\applicationentrypoint.c(75)
   warning C4702: 制御が渡らないコードです。
 MikanLoaderのMain.cにあるUefiMain()関数にあるwhile (1);による
 無限ループがあるため、コール元の applicationentrypoint.cにある
 _ModuleEntryPoint()関数に戻れないことのワーニング(2)を
 エラーとして扱う(1)ために起きたもので、ビルド環境(設定)の違い
 により出るものと思います。
 EDK2(UDK2017)共通のソースファイルやビルド設定は触りたく
 なかったので、MikanLoaderパッケージ側を変更することで
 対処しました。
 ※手順ではコンパイラーの設定変更でリンカー警告となるC4702の
  ワーニングを抑制しています。

【次回の目標】

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

【参考とか引用とか】

・パッケージ単位でコンパイラーやリンカーのオプションを
 追加したり、まるごと変更したりする方法
 「3.7 Building the module」
 https://edk2-docs.gitbook.io/edk-ii-module-writer-s-guide/3_module_development/37_building_the_module
・コンパイラーの警告を非表示にする方法
 https://docs.microsoft.com/ja-jp/cpp/build/reference/compiler-option-warning-level?view=msvc-140
・リンカー警告をエラーとして扱うことについて
 https://docs.microsoft.com/ja-jp/cpp/build/reference/wx-treat-linker-warnings-as-errors?view=msvc-140

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?