9/19/2011

EDKをビルドする その5

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

よし。では、いよいよVC のIDEを使っていこうと思います。コマンドプロンプトとテキストエディタだけでもまあなんとかやっていけると思いますがIDEを使うとソースのエディットやナビゲート、ビルドが一貫して行えるばかりでなく、なんと、エミュレータ環境上で動作しているプログラムをソースレベルデバッグすることができるため、開発効率がとてもよいのです。

というわけでまず、おもむろに「Visual C++ 2005 Express Edition」を立ち上げます。そして「ファイル」メニューの「新規作成」→「既存のコードからプロジェクトを作成」を選択します。



















すると次のような画面が飛び出しますがプロジェクトの種類は「Visual C++」のまま次へをクリックします。
























んで、次の画面に移ります。以下のような画面になりますので、プロジェクトファイルの場所は「C:\TianoCore」と入力し、プロジェクト名はなんでもいいのですがここでは「TianoCore」としておきます。チェックなどはそのままで次へをクリックします。
























すると以下の画面になるので「外部のビルドシステムを使用する」のほうを選択して次へをクリックします。
























次はコマンドラインの入力画面になります。以下のように入力します。んで次へをクリック。
ビルドコマンドライン 「c:\TianoCore\build.cmd c:\TianoCore\Edk NT32」
リビルドコマンドライン 「c:\TianoCore\build.cmd c:\TianoCore\Edk NT32」
クリーンコマンドライン 「c:\TianoCore\build.cmd c:\TianoCore\Edk NT32 clean」
出力(デバッグ用) 「c:\TianoCore\Edk\Sample\Platform\Nt32\Build\Ia32\SecMain.exe」

























次の画面はリリースの構成の設定になりますが、「デバッグ構成の設定と同じ」にあらかじめチェックがついていると思いますので、これはこのままでよいです。そして完了をクリックします。
























ファイルの追加処理が始まるのでしばらく待つと完了します。完了すると、「ソリューションエクスプローラ」にソースツリーが追加されているはずです。これでソースのナビゲートや編集はIDE上でできますが、まだビルドとデバッグの設定が不完全ですので、もうちょっとがんばります。

デバッグの設定からいきます。ソリューションエクスプローラに「TianoCore」(プロジェクト名)というやつがいるはずです。この上で右クリックしてプロパティを開きます。


























するとプロパティページが出てくるのでこの中の「構成プロパティ」の「デバッグ」を選択して「作業ディレクトリ」に「C:\TianoCore\Edk\Sample\Platform\Nt32\Build\IA32」と入力します。そして適用してOKクリックして閉じます。















デバッグの設定はこれでよいです。

次にビルドの設定です。Platform SDKのパスを追加します。

「ツール」メニューの「オプション」を選択します。






















するとオプション画面が開きますので左のツリーから「プロジェクトおよびソリューション」の中の「VC++ディレクトリ」を選択します。そして、左上の「ディレクトリを表示するプロジェクト」のドロップダウンから「インクルードファイル」を選択してその下のフォルダの形をしたアイコンをクリックして新規項目を追加します。内容は「C:\Program Files\Microsoft Platform SDK\include」です。














次に、同じ画面で左上のドロップダウンから「ライブラリファイル」を選択し新規項目を追加します。内容は「C:\Program Files\Microsoft Platform SDK\lib」です。














設定は以上ですと言いたいところですが、実は一つファイルを追加する必要がありまして、コマンドラインの設定時に「c:\TianoCore\build.cmd」と入力しましたが、そんなコマンドはこの時点ではありません。なので作ります。これはバッチファイルで内容は以下です。これは「Edk Getting Started Guide」に載ってるやつそのままです。この内容をコピーしてテキストエディタに貼り付け、「Build.cmd」という名前で保存して、「c:\TianoCore\build.cmd」に置きます。

Bulid.cmd Source

REM @echo off
REM **************************************************************************
REM
REM File: Build.cmd
REM
REM Usage: Build.cmd [EDK directory] [Platform name]
REM
REM Abstract:
REM This batch file is used to initiate an EDK build from within Visual
REM Studio. To use it, create a Visual Studio makefile project, and
REM for the project build commands invoke this batch file with the
REM first argument being the path to the EDK source tree, and the
REM second argument the platform to build (typically "NT32").
REM
REM **************************************************************************
REM Only used for error messages from this file
SET THIS_FILE=c:\TianoCore\build.cmd
if .%2. == .. goto Usage
set EDK_SOURCE=%1
REM Call the batch file that the Visual Studio install created to set environmental
REM variables if required.
REM call "C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat"
if %2 == NT32 goto Build_NT32
REM This error occurs when your Visual Studio project's build command is incorrect.
REM In Visual Studio, right-click the project folder (typically NT32) in the Solution
REM Explorer pane and then select [Properties], then [Configuration Properties],
REM then [NMake] to check your commands. The first argument to this command file
REM is the EDK directory, and the second is the platform to build (case sensitive).
REM
echo.
echo %THIS_FILE%(36) : error 0000 : %2 : platform not supported by this batch file
echo.
goto Usage
:Build_NT32
REM This changes to the right driver letter
%EDK_SOURCE:~0,2%
cd %EDK_SOURCE%\Sample\Platform\Nt32\build
nmake %3 %4 %5 %6
goto Done
:Usage
echo.
echo Usage: Build [EDK directory] [NT32 more...]
echo.
goto Done
:Done
REM *** END Build.cmd ***


これでようやくビルドができるはずです。「ビルド」メニューから「TianoCoreのビルド」を選択するとビルドが始まるはずです。以前のバイナリが残ってる場合は先に「TianoCoreのクリーン」を先にやって一からビルドし直してみます。

さらに、「デバッグ」メニューから「デバッグ開始」を実行するとエミュレータが起動するはずです。よし、このままソースレベルデバッグをやってしまいます。まずは例としてEfiShellのmodeコマンドをデバッグしてみます。ソリューションエクスプローラからTianoCore\Edk\Other\Maintained\Application\Shell\modeとたどっていってmode.cを開きます。で、このコマンドの実行開始ポイントは93行目なのでここでブレイクしたいとすると、エディタ画面の端っこをクリックすると赤い丸がつきます。これがブレイクポイントになります。しかるのち、エミュレータのEFIShellでmodeコマンドを実行すると、見事ブレイクポイントで停止するはずです。

したらば、ツールバーのアイコンやメニューやショートカットキーを使ってステップ実行ができます。一行ずつ処理を追いたい場合はステップインやステップオーバーを使います。ステップオーバーのショートカットキーはF10キーなのでF10キーを連打すると一行ずつ処理が進んでいきそのつど変数の内容やメモリやらレジスタやらが確認できます。んでF5キーでブレイクを解除して通常処理にもどります。


















以上です。今度はEFIShellの自作コマンドでも作ってみよかな。

0 件のコメント:

コメントを投稿