9/19/2011

EDKをビルドする その3


(*この記事は以前、私が運営していたhttp://www.poppolab.comというサイトで公開していたものですが、ドメイン維持の都合により閉鎖しましたため、こちらに投稿し直します。内容は1年近く古いものですので、現在の事情とは食い違う可能性があります。)

さて、いよいよビルドしようかと思います。


まず、あらかじめダウンロードしておいたEdk 1.06.zipをおもむろに解凍します。するとEdkというフォルダが出てくるはずです。続いてCドライブ直下に「TianoCore」という名前のフォルダを作ってその中に先ほどのEdkフォルダを移動します。つまり「C:\TianoCore\Edk」という形ですね。必ずしもここに置かなければならないということはないのですが、「Edk Getting Started Guide」にはこのパスを前提にして説明が書かれているため、それに従います。


次に、「C:\TianoCore\Edk\Sample\Platform\Nt32\Build\Config.env」ファイルをテキストエディタで開いて編集します。この中の「USE_VC8 = NO」という記述を「USE_VC8 = YES」に書き換えます。これはデフォルトではVC7(VS2003)を想定しているためで、VC8(VS2005)のコンパイラを使うためにYESにするわけです。

さしあたって、コマンドプロンプトでのビルド方法を紹介しようと思います。Windowsのスタートメニューから「すべてのプログラム」→「Visual C++ 2005 Express Edition」→「Visual Studio Tools」と辿って「Visual Studio 2005 コマンド プロンプト」を起動します。そしてSDKのインクルードファイルやライブラリを使用するため、以下のコマンドを実行します。


> set INCLUDE=%INCLUDE%;C:\Program Files\Microsoft Platform SDK\include

> set LIB=%LIB%;C:\Program Files\Microsoft Platform SDK\lib


次に、EDK_SOURCEという環境変数をセットするため以下を実行します。


> set EDK_SOURCE=C:\TianoCore\Edk


したらば、ビルドしたいプラットフォームのビルドディレクトリに移動します。とりあえず、IA32をビルドするには以下のようにします。


> cd C:\TianoCore\Edk\Sample\Platform\Nt32\Build


で、いよいよビルドです。以下のコマンドを実行します。


> nmake


とすると恐らく、ビルドエラーになります。本来はこれでビルドできるのですが、なぜかというとですね、エラーメッセージをよく読むと分かるのですが、「C:\TianoCore\Edk\Foundation\Library\Dxe\UefiEfiIfrSupportLib\UefiIfrLibrary.h」に変な文字コードが含まれているためなのです。なので、これを編集しちゃいます。edk1.06ではこのファイルの1088行目に問題の文字列がありまして、「 in UEFI specification AppendixM.」という行の文字化けしている箇所ですね。これを削除するなりしてしまいます。他にも対応策があるかと思いますが、後のバージョンで修正されることを祈りつつ削除しちゃいます。「 in UEFI specification Appendix.」という形にして保存してしまいます。そして実は、同じフォルダ内の「UefiIfrString.c」にも同じ問題があります。340行目ですね。これも同じように文字化け部分を削除しちゃいます。気を取り直してビルドします。


> nmake


今度はビルドが完了したはずです。バイナリは「C:\TianoCore\Edk\Sample\Platform\Nt32\Build\IA32」ディレクトリに出来ています。EFIのモジュールやアプリケーション、ドライバは拡張子「.efi」になります。ところで、IA32プラットフォームではエミュレーション環境が利用できるようになっています。これを動作させるには現在のディレクトリで以下のコマンドを実行します。


> nmake run


すると以下のような画面になりEFIShellが起動するはずです。






ブート中にファンクションキーとかDelキーを押すと以下のようなセットアップ画面に入ることができます。




さらに、「nmake run」をやる前に以下のコマンドを実行するとウィンドウが2つでてきてEfiのファイルシステムが「fsnt0」に、EFIShellのコマンドディレクトリが「fsnt1」にマップされた状態で起動してくるので独自のアプリをビルドしてテストするのに便利かもしれません。


> System.cmd


> nmake run


このSystem.cmdはバッチファイルなので、自分好みにカスタムするのもいいかもしれません。他にも環境変数をあらかじめセットすることでいろいろできそうです。

次にX64プラットフォームのビルドを紹介しようと思います。まずは「C:\TianoCore\Edk\Sample\Platform\X64\Build\Config.env」の「USE_VC8 = NO」 を「USE_VC8 = YES」に書き換えます。で、前述の環境変数をセットして、ビルドディレクトリへ移動します。


> cd C:\TianoCore\Edk\Sample\Platform\X64\Build


そしてビルドです。


> nmake


でビルドできます。X64では残念ながらエミュレート環境は用意されていないようです。


とりあえず、その3はここまでにしておきます。その4ではVCのIDEからビルド~デバッグの方法を紹介しようかと思います。

0 件のコメント:

コメントを投稿