9/20/2011

EDKIIをLinuxでビルドする その4

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

そして、EclipseでEDKIIをビルド、デバッグしてみます。

最初に実行する「edksetup.sh」がビルドのための環境変数やなんかを設定してくれているみたいですねえ。これで設定される環境変数やなんかをEclipse側で設定してしまえばできるぽいのですが、あんまりスマートじゃないし、もうちょっとビルドシステムをよく理解しないと、正当性が判断できかねるので、EDKIとVC IDEの時のようにビルドスクリプトを作って間接的にビルドシステムを呼び出すのが無難な感じがしますね。

まあそれは今後の課題として、実は UnixPkgだけに関しては専用のビルドスクリプトが用意されていて、edksetup.shを実行しなくてもビルドできるのです。なのでそれをEclipseから呼び出すことで比較的スマートにできそうです。ただ、この場合 Conf/target.txtの設定は無視され問答無用にUnixPkgがされるので、別のパッケージをビルドしたい場合には対応できません。とはいえ、まずはエミュレータ環境をソースレベルデバッグできれば、ほぼ事足りるので、しばらくはこれでいってみよー。

で、いろいろ試していて、svnで最新のソースを取得しなおしたら、なんと エミュレータ環境が動かんではないですか。なんということでしょう。で、過去のソースを取得しなおしました。この記事を読んで、試される方は要注意です。エミュレータの動作が確認できたのは、rev10763というやつです。svnでリビジョンを指定してソースを取得するには、


$ svn co -r 10763 https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2 --username guest

ついでに、日付で取得するには


$ svn co -r {20100802} https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2 --username guest

です。今日取得したのが、rev10773だったので、ここ2、3日の間に結構修正が行われているようですね。うーんまだ、あんまり安定していないようです。

よし。気を取り直して、Eclipseの設定を行います。まず、おもむろにEclipseを立ち上げ、てきとうにワークスペースを指定します。そして、「ファイル」メニューから「新規」→「Makefile Project with Existing Code」をクリックします。すると以下のような画面が出てくるので、プロジェクト名には適当な名前をつけます。ここではとりあえず、 「EDKII_UnixPkg」にしました。で、Existing Code Locationは「/home/username/src/edk2」にします。usernameはユーザー名です。言語のチェックボックスはデフォルトのままツールチェインは「<なし>」でいいと思います。



























これで、ソースが「プロジェクトエクスプローラ」に出てくるのはずです。そしてビルドの設定を行うのですが、その前に、「プロジェクト」メニューの「自動適にビルド」のチェックを外して置きます。これが有効になってると、ことあるごとに自動的にビルドが開始されて、ちょっとうざっぽいのです。

次に、「プロジェクトエクスプローラ」で「edk2」を選択して右クリックして「プロパティ」をクリックします。するとプロパティ画面になるので、右のメニューから、「C/C++ビルド」を選んで、ビルダー設定を変更します。まず、「デフォルトビルドコマンドを使用」のチェックを外してビルドコマンドを変更します。内容は「${workspace_loc:/edk2}/UnixPkg/build.sh」です。で、「ビルドロケーション」の「ビルドディレクトリー」も変更します。内容は「${workspace_loc:/edk2}/UnixPkg/」です。
















次に同じ画面の「振る舞い」というタブを選択して、「ビルド(インクリメンタルビルド)」を変更します。現在「all」になっていると思いますが、これを削除して空にします。さらに、「クリーン」の項目も変更します。内容は「cleanall」です。
















これでビルド出来るはずですが、ついでにデバッグ時の設定もやってしまいましょう。プロパティ画面の右の項目から「実行/デバッグ設定」を選択します。何も設定が無い状態だと思いますので、左のほうの「新規」ボタンをクリックして新しい設定を作成します。構成タイプの選択になりますが、「C/C++Application」を選択して「OK」をクリックします。すると、起動構成プロパティの編集画面が出てきます。まずは、「メイン」の画面の「C/C++アプリケーション」を入力します。内容は「Build/Unix/DEBUG_ELFGCC/IA32/SecMain」です。



























次に同じ画面の「(x)= 引数」というタブをクリックします。そんで、下のほうの「作業ディレクトリー」を変更するのですが、このままでは編集出来ないようになっているので、下の「デフォルトの使用」のチェックを外します。するとそして編集します。内容は「${workspace_loc:edk2}/Build/Unix/DEBUG_ELFGCC/IA32」です。




























設定は以上です。「OK」をクリックしてウィンドウを閉じます。すると「edk2のプロパティー」の画面に戻りますので、これも「OK」をクリックして閉じます。それでは、ビルドしてみましょう。Eclipseのハンマーの形をしたアイコンをクリックするか、「プロジェクト」メニューの「すべてビルド」をクリックします。すると、ビルドが始まるはずです。そして、「プロジェクト」メニューの「クリーン」でクリーンできるはずです。デフォルトではクリーン後に再ビルドが自動的に行われるので、確認するにはクリーンの画面で、「ビルドを即座に開始」のチェックを外しておくといいと思います。



























よし。ビルドが確認できたところで、ソースレベルデバッグを試してみます。Eclipseの虫くんのアイコンをクリックするか、「実行」メニューの「デバッグ」をクリックしてデバッグを開始します。すると、再度、自動的にビルドが行われた後、「パースペクティブ切り替えの確認」という画面が出ますが、これはデバッグ専用画面に切り替えるけどいいかい?ちゅうことなので、「はい」をクリックして切り替えます。すると、SecMainのmain関数のところで自動的にブレイクしてデバッグ準備OKな状態になります。もう気づいてると思いますが、SevMainというプログラムがエミュレータの本体なのです。ステップインやステップオーバーアイコンをクリックしてステップ実行できるのです。おお、すばらしい。ブレイクポイントはソースの横っちょで右クリックして設定できます。



















よし。なかなか快適になってきました。ただ、例のごとく、ソースツリーにEFIShellのソースが含まれていないようなので、Shellが起動したあとはソースレベルデバッグできませんな。んー。次の課題はShellのソースを追加することを目指してみます。今回はここまでにします。

0 件のコメント:

コメントを投稿