お疲れ様です!お世話になっております。!!
3回目となりました!今回もどうぞよろしくお願いいたします!!!
#【前回から】
前回の「その2」では Visual Studio Community 2017 をインストール
して、ソースコードのコンパイルやリンクを行いました。
今回は MikanOS のビルドに必要となる EDK2 の環境を構築したいと
思います。
EDK2環境の構築にあたり、バージョンを指定しないで EDK2 の
リポジトリを使用すると、一部コンポーネントがサブモジュール化
されて別のリポジトリを参照するようになっていたため、簡単に
環境構築することができませんでした。
そこで、 少し古いリリースバージョンですが UDK2017 を使用して
EDK2の環境構築をしたいと思います。
このバージョンは環境構築方法が公開されており、EDK2のビルド
ツールのソースコードや、ライブラリのソースコードなどの
構成ファイルも一式ZIPファイル化されています。
詳しくはこちらを参照ください。
https://github.com/tianocore/tianocore.github.io/wiki/UDK2017-How-to-Build
#【今回の目標】
"みかん本" の「2.1章 EDK II入門」を Windows環境に構築する。
UDK2017の環境構築方法に記載のある、 HelloWorld.efi が
ビルド出来たら目標達成とします。
#【結果】
!ビルドできました!
今回の HelloWorld.efi は下記の手順だけですと IA32 になって
しまうため、ビルド出来たら目標達成としました。
(おまけで x64 の HelloWorld.efi もビルドしました。)
#【必要なもの】
・「その2」で記載した「【必要なもの】」一式
・バージョン 2.0.7 以降の Netwide Assembler (NASM)
https://www.nasm.us/
・バージョン 2.7.x系の Python
https://www.python.org/
・UDK2017のソースコード
https://github.com/tianocore/edk2/archive/vUDK2017.zip
#【手順】
※ここでの手順は UDK2017 の構築手順になるべく番号を合わせます。
- ビルド環境をセットアップする
i) Visual Studio Community 2017 をインストールする
AMD64のコンパイラーを選択しましょう。
前回の「その2」の手順が終わっていれば既に選択されて
インストールされています。
ii) バージョン 2.0.7 以降の NASM をインストールする
NASM は C:\Nasm にインストールしましょう。
システムの環境変数 PATH に C:\Nasm を追加しましょう。
私は 2.15.05 の win64 インストーラー版でインストール
しました。
インストール中はインストール先ディレクトリの変更が
必要です。
なお、システム環境変数 PATH は手動で追加する必要が
あります。
また、後の手順 5.で必要となりますので、ここでユーザー
環境変数名 NASM_PREFIX として C:\NASM\ を手動で
追加してください。
iii) Windows版Git(GitHub) をインストールする
前回の「その2」の手順が終わっていれば既にインストール
されています。
iv) バージョン 2.7.x系の Python インストールする
Python は C:\Python27 にインストールしましょう。
(1) システムの環境変数 PATH に C:\Python27 を
追加しましょう。
(2) ユーザーの環境変数名 PYTHON_HOME として
C:\Python27 を追加しましょう。
"Windows x86-64 MSI installer" 版を使用すると、インストール
フォルダが C:\Python27 に設定されます。
私は 2.7.18 をインストールしました。
(1)について、デフォルト設定のままでインストールすると、
環境変数PATH を手動で編集する必要があります。
(2)について、後のコマンド入力回数を減らすために行う
設定です。
2. UDK2017リリースのディレクトリとソースコードを準備する
i) 作業用ディレクトリを作成する
コマンドプロンプトを開き、以下を入力する
- mkdir C:\MyWorkspace
ii) UDK2017リリースのディレクトリとソースコードが圧縮
されたZIPファイルをダウンロードし、i) で作成した作業用
ディレクトリに展開する
UDK2017リリースのディレクトリとソースコードが圧縮
されたZIPファイルはこちらからダウンロードできます。
https://github.com/tianocore/edk2/archive/vUDK2017.zip
展開は C:\MyWorkspace に ZIPファイルの edk2-vUDK2017
フォルダ以下が配置されるようにしてください。
robocopyコマンド を使用する場合は、管理者権限のある
コマンドプロントで以下のように入力します。
- robocopy .\edk2-vUDK2017 C:\MyWorkspace \*.\* /copyall /move /s /e
iii) 省略します。
手順の ii) あるいは iii) は、どちらかを選択して行うものと
なりますので、ここでは iii) を省略します。
iv) 省略します。
後述の手順 4.で BaseTools をビルドしますので、ここでは
iv) を省略します。
3. OpenSSL Crypto Library を準備する
"C:\MyWorkspace\CryptoPkg\Library\OpensslLib\OpenSSL-HOWTO.txt"
を参照して OpenSSL Crypto Library 1.1.0e を準備します。
※とは書きましたが、実際には同テキストファイルに書かれている
「HOW to Install OpenSSL for UEFI Building」 セクションの
「1. Clone the latest official OpenSSL release into the directory」
に書かれていることを行います。
以下は UDK2017 の構築手順には記載のない追加となる手順です。
i) コマンドプロンプトを開く
ii) C:\MyWorkspace\CryptoPkg\Library\OpensslLib へカレント
ディレクトリを移動する
- cd C:\MyWorkspace\CryptoPkg\Library\OpensslLib
iii) Git で OpenSSL_1_1_0e を openssl に clone する
- git clone -b OpenSSL_1_1_0e https://github.com/openssl/openssl openssl
4. BaseTools をビルドする
以下の手順で EDK2(UDK2017) の BaseTools をビルドします。
0) スタートメニュー の Visual Studio 2015 にある、
「VS2015 x86 Native Tools コマンド プロンプト」を開く
※x64を選んでしまうと、この後のビルドに失敗するため
選ばないでください。
i) カレントディレクトリを C:\MyWorkspace に移動する
- cd C:\MyWorkspace
ii) 以下のように入力して BaseTools のビルドを行う
- set PYTHON_HOME=C:\Python27 (これは省略可)
- set EDK_TOOLS_PATH=%CD%\BaseTools
- BaseTools\toolsetup.bat Rebuild
※注意:UDK2017の手順と実際のバッチファイル名に違いがありました。
バッチファイルの実行中に以下の WARNING が出ますが
ここでは無視します。
「!!! WARNING !!! Cannot make executable from Python code, executing python scripts instead !!!」
5. NT32プラットフォームでビルドを行う
以下の手順でUEFIモジュールをビルドします。
i) スタートメニュー の Visual Studio 2015 にある、
「VS2015 x86 Native Tools コマンド プロンプト」を開き
カレントディレクトリを C:\MyWorkspace に移動する
- cd C:\MyWorkspace
ii) 以下の通り edksetup.bat を実行してビルド環境を準備します。
- edksetup --nt32
バッチファイルの実行中に以下の2つの WARNING が出ますが
ここでは無視します。
「!!! WARNING !!! PYTHON_FREEZER_PATH environment variable is not set.」
「!!! WARNING !!! No CYGWIN_HOME set, gcc build may not be used !!!」
iii) 以下の通り build を実行して HelloWorld.efi をビルドする
- build -t VS2015x86
iv) HelloWorld.efi がビルドされたか確認する
- dir C:\MyWorkspace\Build\NT32IA32\DEBUG_VS2015x86\IA32\HelloWorld.efi
※注意:UDK2017の手順とビルドされたファイルが
保存されるフォルダ名に違いがありました。
#【おまけ】
上記まで出来たら、せっかくなので x64 で HelloWorld.efi もビルド
したいと思います。
- テキストエディタで C:\MyWorkspace\Conf\target.txt を修正して
保存する
修正内容は以下の2点です。
・TARGET_ARCH = IA32
-> TARGET_ARCH = X64
・TOOL_CHAIN_TAG = MYTOOLS
-> TOOL_CHAIN_TAG = VS2015x86
- スタートメニュー の Visual Studio 2015 にある、
「VS2015 x86 Native Tools コマンド プロンプト」を開く
- カレントディレクトリを C:\MyWorkspace に移動する
- cd C:\MyWorkspace
- 以下の通り edksetup.bat を実行してビルド環境を準備する
- edksetup --nt32 X64
- 以下の通り build clean を実行する
- build clean
- 以下の通り build を実行して HelloWorld.efi をビルドする
- build
- HelloWorld.efi がビルドされたか確認する
- dir C:\MyWorkspace\Build\NT32X64\DEBUG_VS2015x86\X64\HelloWorld.efi
#【紆余曲折】
・EDK2環境は バージョンなしEDK2 -> UDK2017 -> UDK2018 -> UDK2017
と作ってはうまく動かず消してを繰り返してしまいました。
・バージョンなしEDK2 : C:\MyWorkspace\BaseTools\Source\C\BrotliCompress
が git clone できず断念(だいぶわかっていない)
・1回目のUDK2017 : OpenSSL Crypto Library の準備方法がわからなくて
(よく読んでいなくて)、UDK2018に浮気(まだまだわかっていない)
・1回目のUDK2018 : UDK2018の手順を読んでいたらUDK2017でやり直せる
ような気がして元鞘(まだあやしい)
・2回目のUDK2017 : 出来た!(こいつ大丈夫か?)
#【次回の目標】
・"みかん本" の「2.2章 EDK IIでハローワールド(osbook_day02a)」を
Windows環境で構築する。
にしようと思います。
#【参考とか引用とか】
・「HOW-TO: Set Up The EDK2's Windows-Hosted UEFI Environment With Visual Studio 2010.」
https://uefi.blogspot.com/2012/06/how-to-set-up-edk2s-windows-hosted-uefi.html
いろいろとやっているときに、こちらのサイトで edksetup.bat に --nt32 の
オプションが必要であることがわかりました。
・target.txt の TOOL_CHAIN_TAG の設定値に関しては下記に記載があります。
「Windows systems ToolChain Matrix」
https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems-ToolChain-Matrix