目次


OCAP 入門

第 3 回 OCAP RI をビルドする

OCAP RI スタックを理解し、新しい目的に生かす

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: OCAP 入門

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:OCAP 入門

このシリーズの続きに乞うご期待。

この連載の第 1 回第 2 回では、アプリケーション開発者の視点から OCAP RI (OpenCable Application Platform Reference Implementation) の基本について説明しました。前回までの 2 回の記事では、RI (Reference Implementation: リファレンス実装) プラットフォーム上でアプリケーションを実行する方法、そして RI 機器や他の OCAP 機器用の新しいアプリケーションを作成する方法について学びました。連載の最終回となる今回の記事では、プラットフォームという視点から OCAP RI について説明し、またソースから RI をビルドする方法について説明します。この記事によって OCAP RI スタックを十分に理解すると、OCAP RI プラットフォームの最適化や強化、あるいは他のハードウェアへの移植ができるようになります。

RI のアーキテクチャー

OCAP RI には図 1 のようなアーキテクチャーが使用されています。

図 1. OCAP RI のアーキテクチャー
OCAP RI のアーキテクチャーを説明した図

以下の箇条書きでは、図 1 の内容を説明しています。

  • OCAP スタックは JVM 上で実行されますが、一部のメソッドは OCAP のネイティブ・コードで実装されています。そのため、図 1 では OCAP スタックの Java 言語部分を OCAP スタックのネイティブ部分と分離しています。
  • JVM は (「第 1 回」で説明したとおり) CDC (Connected Device Configuration)、FP (Foundation Profile)、PBP (Personal Basis Profile) を実行します。OCAP RI の JVM は phoneME Advanced というオープンソース・プロジェクト (「参考文献」を参照) の変更版を使用しています。
  • OCAP スタックのネイティブ実装と JVM 自体は、プラットフォームとは独立した MPE (Multimedia Platform Extensions) というコード・レイヤーに対して実装されます。
  • そして MPE は MPEOS レイヤーのプラットフォーム依存コードを呼び出します。OCAP スタックを実行する各機器には MPEOS を実装する必要があります。
  • RI プラットフォームは一種の仮想デバイスまたはデバイス・シミュレーターです。RI プラットフォーム自体を Windows または Linux 上でビルドして実行すると、デバイス・シミュレーターになります。MPEOS 実装を使用すると RI プラットフォームが呼び出され、その結果、デスクトップ・コンピューター上のデバイス・シミュレーター上で実行される実動 OCAP スタックが得られます。

次に、Windows 上で OCAP RI をビルドする方法について説明します。

必要なツール

OCAP RI は Linux ライクな環境でビルドする必要があります。基本的なビルド・ツールは以下のとおりです。

  • make
  • gcc
  • Java コンパイラー
  • Ant

Windows 上で OCAP RI をビルドするためには、以下の 3 つのパッケージをインストールする必要があります。

  • Cygwin
  • JDK (Java Development Kit)
  • Ant

Cygwin

最初のステップは、Windows 上で Linux ライクな環境を実現する Cygwin (「参考文献」を参照) をインストールすることです。OCAP RI プロジェクトには、必要な追加パッケージが既にすべて含まれたバージョンの Cygwin が用意されています。Cygwin を適切にインストールするための確実な方法は、Cygwin をダウンロードしてインストールし、次に OCAP RI のドキュメントに従って必要な一連の特定パッケージを Cygwin にインストールする方法です。

まず、カスタマイズされたバージョンの Cygwin をダウンロードします。これは約 64MB の ZIP ファイルです。このファイルをダウンロードしたら、ハードディスク上のどこかに解凍します。すると cygwin-minimal-20090611 というディレクトリーが作成されます。このディレクトリーを開き、このディレクトリーの中にある setup.exe を実行します。

インストーラーのほとんどの部分では、デフォルトを受け入れて構いませんが、1 つだけ変更が必要な部分があります。「Choose A Download Source (ダウンロード・ソースを選択)」画面では、「Install from Local Directory (ローカル・ディレクトリーからインストール)」オプションを選択する必要があります (図 2)。

図 2. ローカル・ディレクトリーから Cygwin をインストールする
ローカル・ディレクトリーから Cygwin をインストールする画面のスクリーン・ショット
ローカル・ディレクトリーから Cygwin をインストールする画面のスクリーン・ショット

また、ローカル・ディレクトリーのパッケージをすべてインストールするようにインストーラーに指示する必要があります。「Select Packages (パッケージを選択)」画面で、「All (すべて)」 の隣をクリックし、「Default (デフォルト)」ではなく「Install (インストール)」が表示されるようにします (図 3)。

図 3. すべてのパッケージをインストールするようにインストーラーに指示する
どのパッケージをインストールするのかを指示する画面のスクリーン・ショット
どのパッケージをインストールするのかを指示する画面のスクリーン・ショット

JDK

次に、JDK が必要です。私は Sun (Oracle) の JDK を使いました。まず、インストーラー・パッケージをダウンロードします。

JDK には、javac (Java コンパイラー)、jar (JAR ファイルを作成するツール)、その他のツールが含まれています。

インストーラーを実行します。ほとんどの部分についてはデフォルトを受け入れて構いませんが、インストール・ディレクトリーについてはデフォルトの設定 (デフォルトは C:\Program Files の中のいずれかのディレクトリー) を変更することを強く推奨します。空白を含むパス名は (皆さんにとってもツールにとっても) 混乱を招きやすいため、もっと単純なパス名を選択します。私は C:\jdk1.6.0_18 というパス名にしました。

Ant

Ant は高度なビルド・ツールであり、特に Java コードのビルドに非常に適しています。OCAP RI のビルド・システムは Ant と make の両方を使用する混合型です。make は Cygwin パッケージの一部としてインストールされますが、Ant は別にダウンロードしてインストールする必要があります。

Ant の Web サイトからバイナリー・インストーラーをダウンロードし、適切な場所に解凍します。この場合も、単純な (空白を含まない) パスを選択することを強く推奨します (例えば C:\apache-ant-1.8.0 など)。

JDK と Ant が C:\Program Files のような風変わりな場所にインストールされている場合も OCAP RI をビルドすることは可能ですが、そうした場合の作業は少し面倒です。

ソースを入手する

これで必要なツールがすべて用意できたので、「スタート」 > 「すべてのプログラム」 > Cygwin > Cygwin Bash Shell の順に選択して Cygwin ターミナルを開きます。これで OCAP RI のソースを入手する準備が整いました。

先ほどと同様、複雑ではないパスを使うことを推奨します。私は OCAP RI のソースを Cygwin システムのルートに置きました。ソース・ファイルは Subversion リポジトリーの中にあり、ゲストの資格情報 (ユーザー名とパスワードの両方が cruise) を使用することで、このリポジトリーの中のソース・ファイルにアクセスすることができます。Cygwin シェルで下記のシーケンスを使ってコードをチェックアウトし、Cygwin システムのルートに置きます。

$ cd /
$ export SVN_USER=cruise
$ export SVN_PASSWORD=cruise
$ svn checkout -N https://community.cablelabs.com/svn/OCAPRI

皆さんが CableLabs のサーバーにアクセスするのは今回がおそらく最初であるため、CableLabs のサーバーを正式なものとして同定するための Subversion のメッセージが表示されるかもしれません。その場合には、CableLabs のサーバーの証明書を受け入れ、先に進む必要があります。プロンプトとして表示される「(R)eject, accept (t)emporarily or accept (p)ermanently? (拒否する場合は「R」、一時的に受け入れる場合は「t」、以後常に受け入れる場合は「p」) 」に対し、「p」を入力します。

Error validating server certificate for 'https://community.cablelabs.com:443':
 - The certificate is not issued by a trusted authority. Use the
   fingerprint to validate the certificate manually!
Certificate information:
 - Hostname: community.cablelabs.com
 - Valid: from Tue, 15 Dec 2009 00:00:00 GMT until Wed, 15 Dec 2010 23:59:59 GMT
 - Issuer: www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign,
           VeriSign International Server CA - Class 3,
           VeriSign, Inc., VeriSign Trust Network
 - Fingerprint: 8a:02:31:2e:5d:3b:5b:6c:c8:70:85:e6:4d:8b:02:1f:93:1c:f3:cf
(R)eject, accept (t)emporarily or accept (p)ermanently? p
A    OCAPRI/checkout_dev_env.sh
A    OCAPRI/README
 U   OCAPRI
Checked out revision 7167.
$

チェックアウトの最初の部分は即座に処理され、Subversion リポジトリーから 2 つのファイルが取得されます。

次に、checkout_dev_env.sh というスクリプトを実行し、必要な残りのソース・ファイルをすべて取得します。

$ cd OCAPRI
$ ./checkout_dev_env.sh trunk

このチェックアウト・ステップには長い時間がかかり、私のコンピューターでは約 90 分かかりました。皆さんの場合にどれだけ時間がかかるかは、コンピューターの処理速度やネットワーク接続の速さ、そして CableLabs のサーバーの状況によって変わります。

私の場合はネットワーク・タイムアウトに関するメッセージがいくつか表示され、必要なすべてのファイルを入手することはできませんでした。2 回目に checkout_dev_env.sh スクリプトを実行しても何もファイルを取得できない場合には、ソース・ファイルのフルセットが得られたと思って間違いありません。

ビルドを開始する

ビルドには 2 つのステップが必要であり、どちらも 1 つのビルド・コマンドで完了することができます。最初に RI プラットフォーム自体をビルドする必要があります。RI プラットフォームは機器の OS 上で最下層に近いレイヤーであり、このレイヤーの上に OCAP のすべてのスタックが構築されます。そして 2 番目のステップとして OCAP の実装をビルドします。

環境変数を設定する

ビルドを開始する前に、必要なものをどこで探せばよいのかをビルド・システムに指示する必要があります。ビルド・システムはビルドを行う上で、下記のような環境変数を必要とします。

  • OCAPROOT は最も重要な変数です。この変数によって OCAP 実装の最上位レベルのディレクトリーを指定します。
  • OCAPTC は OCAP Target Configuration であり、その OCAP 実装を実行する機器を指定します。
  • PLATFORMHOST はビルドを実行するコンピューターのタイプを示します。
  • PLATFORMROOT は RI プラットフォームのベース・ディレクトリーです。

幸いなことに、環境変数を設定するスクリプト (runk/setEnv) は既に作成されています。setEnv は先ほど実行した checkout_dev_env.sh スクリプトによって生成されます。ただしビルドを行う前に setEnv を少し編集し、JAVA_HOMEANT_HOME の定義を追加する必要があります。私の場合はリスト 1 で太字にしてある行を追加する必要がありました。

リスト 1. JAVA_HOMEANT_HOME の定義を setEnv に追加する
export PLATFORMROOT=C:/cygwin/OCAPRI/trunk/ri/RI_Platform
export OCAPROOT=C:/cygwin/OCAPRI/trunk/ri/ODLSrc/OCAP-1.0
export RICOMMONROOT=C:/cygwin/OCAPRI/trunk/common
export OCAPHOST=Win32-Cygwin
export OCAPTC=CableLabs/simulator/Win32/debug
export PLATFORMHOST=Win32-Cygwin
export PLATFORMTC=Win32/debug
export TWB_TOOLROOT=C:/cygwin/OCAPRI/trunk/ri/RI_Platform

export JAVA_HOME=C:/jdk1.6.0_18
export ANT_HOME=C:/apache-ant-1.8.0

if [ -z "${PATH_UR}" ]
then
  export PATH_UR=$PATH
fi

export PATH=`cygpath -u ${ANT_HOME}`/bin:`cygpath -u ${JAVA_HOME}`/bin:${PATH_UR}

当然ですが、パスはコンピューターごとに異なります。

私が追加した部分には、Windows のパスと Cygwin のパスとの変換を行うあまり重要でない部分も含まれています。重要な点は、JAVA_HOMEANT_HOME を定義して PATH に追加する必要がある、という点です。

setEnv を適切に設定できたら、このスクリプトを実行します。

$ cd trunk
$ source setEnv

Ant ビルド・スクリプトを実行する

これでビルドの準備が整いました。OCAP RI には、RI プラットフォームと OCAP 実装の両方をビルドする Ant スクリプトが含まれています。このスクリプトを下記のように実行します。

$ cd ri
$ ant build

私のマシンでは、このスクリプトの実行に約 13 分かかりました。このスクリプトが終了すると、OCAP RI を実行することができます。

$ cd $PLATFORMROOT
$ ./runRI.sh -tunetest -setup

ファイアウォールに対し、いくつかのネットワーク接続を許可するように指示する必要があるかもしれません。しかしそれを除けば、1 分もかからずに擬似的なテレビ画面が表示されるはずです (図 4)。

図 4. OCAP でテレビ・ドラマ「ヤング・スーパーマン (原題 Smallville)」を表示する
テレビ・ドラマ「ヤング・スーパーマン (原題 Smallville)」の一画面を表示した OCAP のスクリーン・ショット
テレビ・ドラマ「ヤング・スーパーマン (原題 Smallville)」の一画面を表示した OCAP のスクリーン・ショット

ビルド・システムは必要なファイルをどのように検索するか

以下はビルド・システムがビルド方法を決定するために使用する環境変数の詳しい説明です。

PLATFORMHOST は実際にはパスです。ビルド・システムは $OCAPROOT/hostconfig/$PLATFORMHOST を検索して設定を見つけます。この変数は主に、ビルドの際に使われるツールを定義するために使われます。

ビルド・システムは構成情報の検索と出力ファイルの配置の両方に OCAPTC を使用します。OCAPTC もパスです。ビルド・システムは $OCAPROOT/target/$OCAPTC を検索し、ターゲットとする構成に関連する構成ファイルを見つけます。ビルド・システムは $OCAPROOT/gen/$OCAPTC の中に中間的なビルド・ファイルを作成し、最終的なビルド結果を $OCAPROOT/bin/$OCAPTC に配置します。

OCAPTC によって決まる最も重要なものの 1 つとして、使用される MPEOS 実装は OCAPTC によって決まります。例えば Windows で OCAP RI をビルドする場合、OCAPTC は CableLabs/simulator/Win32/debug です。$OCAPROOT/target/CableLabs/simulator/Win32/debug/buildrules.properties を調べると、下記の定義があることがわかります。

build.mpeos.BUILDOS=RI_Win32

この行はビルド・システムに対して MPEOS の RI_Win32 実装をビルドするように指示しており、RI_Win32 は RI プラットフォームを使って実装されます。この実装に対応するソース・ファイルは $OCAPROOT/mpe/os/RI_Win32 にあります。

$OCAPROOT のディレクトリーの詳細

これでビルド・システムが使用する場所のいくつかを理解できましたが、他のディレクトリーに関してはどうなのでしょう。下記は $OCAPROOT の中の重要なディレクトリーを簡単に説明したものです。

  • apps にはサンプル・アプリケーションが含まれています (例えば apps/qa の中にある一連のテスト・アプリケーションなど)。
  • bin にはビルドの結果が含まれています。ビルドの結果は bin/$OCAPTC に置かれます。
  • docs は OCAP プラットフォームに関するドキュメントや API リファレンスのホーム・ディレクトリーです。
  • gen には中間的なビルド・ファイルが含まれています。このディレクトリーの内部にアクセスする必要はないはずです。
  • hostconfig にはビルド・ホストの構成ファイルがあります。
  • java には OCAP スタックの Java 言語レイヤーのソース・コードがあります。
  • jni には OCAP スタックのネイティブ実装レイヤーのソース・コードがあります。
  • jvm は JVM のソース・ファイルがある場所です。この JVM は phoneME Advanced プロジェクトの変更版です。
  • mpe には MPE レイヤーのソース・コードが含まれています。また mpe の mpe/os には MPEOS レイヤーのさまざまな実装が含まれています。
  • target はターゲット専用の構成ファイルのための場所です。
  • thirdparty には、OCAP の実装、つまり OCAP RI を構成するさまざまなオープンソース・パッケージ (DirectFB、Freetype2、zlib など) のソース・コードが含まれています。

ビルドの結果は、ご想像のとおり $OCAPROOT/bin/$OCAPTC ディレクトリー内のいくつかの重要なファイルやディレクトリーの中に出力されます。

JVM 自体はソースが $OCAPROOT/jvm にあり、ここでビルドされます。JVM のバイナリー・ライブラリー、特に libcvm は $OCAPROOT/bin/$OCAPTC/bin にコピーされ、それ以外のサポート・ファイルは $OCAPROOT/bin/$OCAPTC/env/cvm にコピーされます。

OCAP のネイティブ・コード・レイヤー (MPE レイヤー) と MPEOS レイヤーのビルド結果はすべて、$OCAPROOT/bin/$OCAPTC/bin の中の libmpe という 1 つのライブラリーに出力されます。

OCAP の Java 言語レイヤーのビルド結果は $OCAPROOT/bin/$OCAPTC/env/sys/ocap-classes.jar に出力されます。

まとめ

ここまで読み進むと、OCAP RI についてはひととおり理解したことになります。この連載の第 1 回では、OCAP スタックのアーキテクチャーを説明し、OCAP RI を紹介しました。また Windows 上で OCAP RI を使ってアプリケーションを実行する方法について学びました。第 2 回では、コマンドライン・ツールまたは Eclipse プラグインのいずれかを使って OCAP スタック用の独自のアプリケーションを作成する方法を説明しました。

そしてこの記事では最終回として、OCAP RI 自体をビルドする方法について学びました。OCAP を扱うことに関心がある人にとっては、OCAP RI 自体をビルドすることが最大限 OCAP の制御を行うことになります。この連載で紹介したビルド・システムやソース・ディレクトリーの説明を基に、皆さんは RI のコードに変更を加え (当然ながらライセンス条件の対象になります)、その結果を調べることができるようになりました。ではコーディングを楽しんでください。


ダウンロード可能なリソース


関連トピック

  • CableLabs の OCAP-RI のウィキには、OCAP RI のビルド方法を説明したページがあります。このページはこの記事ほど読んで楽しいものではありませんが、このウィキ・ページで最新情報を知ることができます。
  • OCAP-RI のウィキ・ページ、Build Environment - Cygwin MinGW には、Cygwin のインストール方法に関する詳細が説明されています。
  • phoneME Advanced プロジェクトは OCAP RI で使われている JVM の基礎となっています。
  • OCAP 規格は CableLabs からオンラインで入手することができます。
  • tru2way は一般消費者向けの OCAP のブランド名です。
  • Creating Interactive TV Applications With the Tru2way Platform and OCAP」(Bruce Hopkins 著、Sun Developer Network、2009年4月) は、双方向テレビの概念と、OCAP/tru2way の開発を開始するための方法を解説した記事です (ただし RI は使用していません)。
  • Blu-ray Disc Application Development with Java ME, Part 1: Creating Your First Application」(Bruce Hopkins 著、Sun Developer Network、2008年9月) には、ブルーレイ・アプリケーションの開発を始めるためのヒントが含まれています。
  • Cable Technology - Why Tru2way Will Explode In The U.S. In 2009」(Jeff Bonin 著、TMCnet、2009年5月) は、なぜ OCAP によって新しい製品やサービスへの需要が喚起されているのかについて、ケーブルテレビ業界内部の目で解説しています。
  • developerWorks の Java technology には、Java プログラミングのあらゆる側面を網羅した記事が豊富に用意されています。
  • OCAP RI プロジェクトは java.net でホストされており、このプロジェクトからバイナリー・インストーラーや Eclipse プラグインをダウンロードすることができ、またソース・コードの入手方法を知ることができます。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Java technology
ArticleID=485210
ArticleTitle=OCAP 入門: 第 3 回 OCAP RI をビルドする
publish-date=03302010