OCAP 入门之构建 OCAP RI

红薯 发布于 2010/05/09 21:27
阅读 1K+
收藏 0

本文是最后一期,文中从平台的角度描述 OCAP RI,并展示如何从源文件构建 RI。通过本文对 OCAP RI 栈有了深入理解后,就可以优化或增强该平台,或者将它移植到自己选择的硬件上。

RI 架构

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


图 1. OCAP RI 架构
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 环境中构建。基本构建工具有:

  • make
  • gcc
  • 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
从本地安装 Cygwin from a local directory 的屏幕快照

此外,必须告诉安装程序安装所有的包。在 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.sh
A OCAPRI/README
U OCAPRI
Checked 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_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 包括一个 Ant 脚本,它可以构建任何东西,包括 RI 平台和 OCAP 实现。现在运行它:

$ cd ri
$ ant build

 

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

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

 

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


图 4. OCAP 中的 Smallville
显示 Smallville 的 OCAP 的屏幕快照

构建系统如何发现目标

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

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 代码进行更改(当然要遵从许可条款),然后看看效果如何。享受编程吧!

加载中
返回顶部
顶部