9/20/2011

EFI Toolkitを使ってみる

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


これまで 、EDKについて書きじゃくってましたが、そろそろアプリ開発に着手したいと思います。が、EDKをベースに実際書き始めてみると、EDKはどうも、ファームウェアのモジュールや EFI Shell上で動作するコマンドを作成するには、強力ですが、スタンドアローンのアプリを作成するにはあまり具合がよくない感じがします。そう、私が作りたいのはEFIShell上で動作するコマンドではなく、 直接EFIブートで起動できるスタンドアローンなアプリなのです。で、実はEFIアプリの開発用にEFI Toolkitというのがありまして、これを使ったほうが効率がよさそうなので試してみます。

まずは例によってソースやドキュメントのリンクから

http://www.intel.com/technology/efi/toolkit_overview.htm
http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Efi-toolkit

いろいろ調べてみると、Intelからv1.10がリリースされていて、 現在はTianoCoreのオープンソースプロジェクトで、x64もビルドできるようになったv2.0が最新のようです。で、肝心の内容物は、ヘッダファイルやライブラリ、ドキュメント、サンプルアプリで、これをビルドするためのMakefileとバッチファイルからなるビルドシステムですな。動作環境はWindowsXP VC++6.0 or 7.0 or 7.1(VS .NET 2003) and/or Windows Server 2003 SP1 DDK といったところです。(v2.0) ちなみに、このEFI ToolkitのライブラリやヘッダはLinux(というかUnix系OS)に移植されているようです。gun-efiというやつで、debianやubuntuだと標準のリポジトリからapt-getでインストールできます。LinuxのEFIブートローダのeliloやMacOSXのマルチブートローダrEFItなどに利用されているようです。こちらもそのうち試してみたいですね。話がそれましたが、まずは付属ドキュメントを適当に斜め読みして、サンプルアプリをビルドしてみます。

まず、ダウンロードしたEFI_Toolkit_2.0.0.1.zipを解凍して、ドキュメントに従い「C:\Toolkit\EFI_Toolkit_2.0」に置きます。そして、Visual Studio 2005コマンドプロンプトを起動して、環境変数をセットして、Toolkitを置いたディレクトリへ移動します。

> set SDK_BUILD_ENV=nt32
> set SDK_INSTALL_DIR=C:\Toolkit\EFI_Toolkit_2.0
> cd C:\Toolkit\EFI_Toolkit_2.0


して、ビルドします。

> nmake

すると「C:\Toolkit\EFI_Toolkit_2.0\build\nt32\bin」にバイナリができっるって寸法なんですが、なんとビルドエラーです。そうなんです、私、VS .NET2003なんて高価なものは持ってないのでVC++ 2005 ExpressEditionでやってるんですが、これはVC8なのでコンパイルできないぽいです。やっぱ2003じゃないとだめかも。

で、困ったちゃんなんですが、ちょっと考えてみると、そもそもWinDDK2003にもたしかx86のコンパイラついてたよな。と思い出し、これも2003なのでVC7と同じコンパイラかもと思って、ためしにこれでコンパイルしてみました。やり方は、Windowsの「スタート」メニュー→「Development Kits」→「Windows DDK 3790.1830」→「Build Environments」→「Windows XP」→「Windows XP Free Build Environment」でコマンドプロンプトを開いて、前述の環境変数のセットからビルドまでを実行してみたところ、見事ビルドが通りました。

んーVS 2003 .NETなんていらんのとちゃうかな。と心の中でつぶやきつつ、一応、cl.exeのバージョンを確認しとこうと、ぐぐってみた。DDK 2003のcl.exeは13.10.4035に対して、VC7.0のcl.exeは13.10.3077で、VC7.1のcl.exeは13.10.6030ぽいです。んーちょうど、このふたつの中間くらいのバージョンですな。たぶん問題はないでしょう。まあ自己責任ということで、これでいきます。

ついでなので、X64版のビルドの仕方も書いときます。

set SDK_BUILD_ENV=em64t
set SDK_INSTALL_DIR=C:\Toolkit\EFI_Toolkit_2.0
set MSSdk = C:\WINDDK\3790.1830\bin\win64\x86\amd64
cd C:\Toolkit\EFI_Toolkit_2.0
nmake

で、サンプルアプリがビルドできました。今回はここまでにします。次はこのToolkitを使ってアプリを作ってみます。

0 件のコメント:

コメントを投稿