OCAP入门,第3部分:构建OCAPRI

本系列的 第 1 部分 和 第 2 部分 让您从应用程序开发人员的角度初步认识 OpenCable Application Platform. Reference Implementation (OCAP RI)。您学到了如何在 RI 平台上运行应用程序,以及如何为 RI 或其他 OCAP 设备创建新的应用程序。本文是最后一期,文中从平台的角度描述 OCAP RI,并展示如何从源文件构建 RI。通过本文对 OCAP RI 栈有了深入理解后,就可以优化或增强该平台,或者将它移植到自己选择的硬件上。

RI 架构

OCAP RI 使用图 1 中显示的架构:

图 1. OCAP RI 架构

下面的信息对图 1 作了说明:

OCAP 栈运行在 JVM 上,但是有些方法是用本地代码实现的。相应地,图 1 将 OCAP 栈的 Java 语言部分与 OCAP 栈的本地部分分开来。

JVM 运行 Connected Device Configuration (CDC)、Foundation Profile (FP)和 Personal Basis Profile (PBP),第 1 部分 对此作了描述。OCAP RI 的 JVM 使用一个开放源代码项目 phoneME Advanced 的修改版。

OCAP 栈的本地实现和 JVM 本身被移植到一个独立于平台的代码层,即 Multimedia Platform. Extensions (MPE)。

而 MPE 又调用 MPEOS 层的独立于平台的代码。MPEOS 需要移植到在 OCAP 栈上运行的设备。

RI 平台是一种虚拟设备或设备模拟器。RI 平台本身可以在 Windows 或 Linux 平台上构建和运行,形成一个设备模拟器。当使用基于 RI 平台的 MPEOS 实现时,可得到一个在桌面计算机上的设备模拟器上运行的实用 OCAP 栈。

接下来,我将展示如何在 Windows 上构建 OCAP RI。

工具

OCAP RI 必须在类 Linux 环境中构建。基本构建工具有:

makegcc

Java 编译器

Ant

要在 Windows 上构建 OCAP RI,需要安装 3 个包:

Cygwin

Java Development Kit (JDK)

Ant

Cygwin

第一步是安装 Cygwin,它在 Windows 上提供一个类 Linux 环境。OCAP RI 项目提供了 Cygwin 的一个版本,它已经包括所有必需的附加包。正确安装 Cygwin 的方式是下载并安装它,然后根据 OCAP RI 文档将一组必需的包安装到 Cygwin。

首先 下载 Cygwin 的定制版。它是一个 ZIP 文件,大约 64MB。下载后,将它解压到硬盘上某个地方。这样将得到一个 cygwin-minimal-20090611 目录。打开该目录,然后运行其中的 setup.exe 文件。

大部分情况下,可以接受安装程序中的默认设置,但是有一个地方必须更改,那就是在 Choose A Download Source 屏幕上选择 Install from Local DirecTory 选项,如图 2 所示:

图 2. 从本地目录安装 Cygwin

此外,必须告诉安装程序安装所有的包。在 Select Packages 屏幕,在 All 旁边单击鼠标,使之显示 Install 而不是 Default,如图 3 所示:

图 3. 告诉安装程序安装包

JDK

接下来,需要一个 JDK。我使用 Sun(Oracle)工具包。首先 下载安装程序包。

JDK 提供 javac(Java 编译器)、jar(用于创建 JAR 文件的工具)和其他工具。

运行安装程序。可以接受大部分默认设置,但是强烈建议更改安装目录,默认目录为 C:/Program Files。带空格的路径名称可能使您和您的工具感到困惑,所以选择一个更简单的目录。我选择 C:/jdk1.6.0_18。

Ant

Ant 是一个高级的构建工具,特别适合构建 Java 代码。OCAP RI 的构建系统由 Ant 和 make 混合而成。make 是随 Cygwin 包一起安装的,但是 Ant 需要单独下载和安装。

从 Ant 站点 下载一个二进制安装程序。将它解压到一个位置。同样,强烈建议选择一个简单的路径(不包含空格),例如 C:/apache-ant-1.8.0。

虽然将 JDK 和 Ant 安装在更少见的位置,例如 C:/Program Files 时,也可以构建 OCAP RI,但是那样更麻烦一点。

获得源文件

现在所有工具都已就绪,接下来通过选择 Start > All Programs > Cygwin > Cygwin Bash Shell 打开一个 Cygwin 终端。然后就可以获得 OCAP RI 源文件了。

与之前一样,建议使用一个简单的路径。我将 OCAP RI 源文件放在 Cygwin 安装目录的根目录下。这些源文件包含在一个 Subversion 库中,可以使用 guest 凭证(用户名和密码都是 cruise)来访问这些文件。在 Cygwin Shell 中使用下面的序列签出(check out)代码,并放入 Cygwin 安装目录的根目录中:

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

Subversion 可能显示一条关于识别 CableLabs 服务器的消息,因为这可能是第一次访问该机器。在此情况下,需要接受服务器的凭证,才能继续。在看到 (R)eject, accept (t)emporarily or accept (p)ermanently? 提示时,输入 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.shA  OCAPRI/README  U  OCAPRIChecked out revision 7167.$

签出的第一部分很快完成,并从 Subversion 库获得两个文件。

接下来,运行脚本 checkout_dev_env.sh 获取需要的其他源文件:

$ cd OCAPRI$ ./checkout_dev_env.sh trunk

这个签出步骤需要较长的时间,在我的计算机上大约是 90 分钟。具体时间视计算机的速度、网络连接的速度以及 CableLabs 服务器的状态而定。

我收到了一些关于网络超时的消息,并且没有得到所有需要的文件。如果再次运行 checkout_dev_env.sh 脚本时没有获取任何文件,那么可以确信已经得到了一组完整的源文件。

构建

构建需要两步,每一步可通过一个构建命令完成。首先,需要构建 RI 平台本身,它是位于设备操作系统之上的最接近底层的一层,为 OCAP 栈提供支撑。第二步是构建 OCAP 实现。

设置环境变量

在构建任何东西之前,必须告诉构建系统从哪里找到它需要的东西。构建系统依赖于一些环境变量来达到这个目的:

OCAPROOT 是最重要的变量。它指向 OCAP 实现的顶层目录。

OCAPTC 是 OCAP Target Configuration,它是要运行 OCAP 实现的设备。

PLATFORMHOST 表明将执行构建的计算机的类型。

PLATFORMROOT 是 RI 平台的基本目录。

幸运的是,已经有一个脚本 — trunk/setEnv — 可用于设置环境变量。setEnv 是之前运行的 checkout_dev_env.sh 脚本生成的。但是,在准备构建之前,需要编辑一下 setEnv:必须增加 JAVA_HOME 和 ANT_HOME 的定义。清单 1 中加粗的行是需要添加的行:

清单 1. 添加 JAVA_HOME 和 ANT_HOME 定义到 setEnv 中

export PLATFORMROOT=C:/cygwin/OCAPRI/trunk/ri/RI_Platformexport CAPROOT=C:/cygwin/OCAPRI/trunk/ri/ODLSrc/OCAP-1.0export RICOMMONROOT=C:/cygwin/OCAPRI/trunk/commonexport CAPHOST=Win32-Cygwinexport CAPTC=CableLabs/simulaTor/Win32/debugexport PLATFORMHOST=Win32-Cygwinexport PLATFORMTC=Win32/debugexport TWB_TOOLROOT=C:/cygwin/OCAPRI/trunk/ri/RI_Platformexport JAVA_HOME=C:/jdk1.6.0_18 export ANT_HOME=C:/apache-ant-1.8.0if [ -z "${PATH_UR}" ]then  export PATH_UR=$PATHfiexport PATH=`cygpath -u ${ANT_HOME}`/bin:`cygpath -u ${JAVA_HOME}`/bin:${PATH_UR}

当然,对于您的计算机而言,这些路径可能不同。

我增加了一些额外的代码,用于 Windows 路径与 Cygwin 路径之间的转换。但是,重点是必须定义 JAVA_HOME 和 ANT_HOME,并将它们添加到 PATH 中。

设置好 setEnv 后,运行它:

$ cd trunk$ source setEnv

运行 Ant 构建脚本

现在可以开始构建了。OCAP RI 包括一个 Ant 脚本,它可以构建任何东西,包括 RI 平台和 OCAP 实现。现在运行它:

$ cd ri$ ant build

在我的计算机上这大约需要 13 分钟。完成后,便可以运行 OCAP RI:

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

可能需要让防火墙允许一些网络连接,这样在一分钟内应该可以看到模拟的电视,如图 4 所示:

图 4. OCAP 中的 Smallville

构建系统如何发现目标

下面仔细分析构建系统用于帮助决定如何执行构建的那些环境变量。

PLATFORMHOST 是一个真正的路径。构建系统在 $OCAPROOT/hostconfig/$PLATFORMHOST 中查找设置。这主要用于定义构建期间使用的工具。

构建系统使用 OCAPTC 查找配置信息和放置输出文件。OCAPTC 也是一个路径。构建系统通过在 $OCAPROOT/target/$OCAPTC 中进行查找,发现与目标配置相关的配置文件。它在 $OCAPROOT/gen/$OCAPTC 中创建中间构建文件,而将构建的最终结果放在 $OCAPROOT/bin/$OCAPTC 中。

OCAPTC 确定的最重要的一点是使用哪种 MPEOS 实现。例如,在 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 平台实现的。可以在 $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 源文件的地方。这是 phoneME Advanced 项目经过修改的一个版本。

mpe 包含 MPE 层的源代码。其中的 mpe/os 还包含 MPEOS 层的各种实现。

target 是存放特定于目标的配置文件。

thirdparty 包含属于 OCAP 实现或 OCAP RI 的各种开放源码包,例如 DirectFB、Freetype2、zlib 等的源代码。

正如您所知的,构建的输出在 $OCAPROOT/bin/$OCAPTC 中。

JVM 本身的源代码包含在 $OCAPROOT/jvm 中。它的二进制库,特别是 libcvm,被复制到 $OCAPROOT/bin/$OCAPTC/bin,其他支持文件被复制到 $OCAPROOT/bin/$OCAPTC/env/cvm。

OCAP 的本地代码层,即 MPE 层,以及 MPEOS 层都被构建到一个单独的库 libmpe 中,这个库存放在 $OCAPROOT/bin/$OCAPTC/bin 中。

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 的人来说,这是最高级的控制。基于本文对构建系统和源目录的解释,您现在可以随意对 RI 代码进行更改(当然要遵从许可条款),然后看看效果如何。享受编程吧!

灿烂甜美!那一瞬的激-情绽放,催人奋进!胜利,永远属于为梦想奋斗的人新乐吧

OCAP入门,第3部分:构建OCAPRI

相关文章:

你感兴趣的文章:

标签云: