Yocto 构建 IoT 开发工具包的一些提示 - 示例:添加 Java JRE





0/5 (0投票)
最近有人向我询问关于 Yocto 构建的更多文档。特别是,此人提到在将 Java 添加到自己的 IoT Yocto 构建时遇到困难。
引言
最近有人向我询问关于 Yocto 构建的更多文档。特别是,此人提到在将 Java 添加到自己的 IoT Yocto 构建时遇到困难。这个对话触发了以下帖子
为什么您不需要自己进行 Yocto 构建
首先:为了使用 IoT 开发套件,通常不需要接触 Yocto 构建。该开发套件提供了一个预构建的 SD 卡启动映像,用于放在您的 Intel(R) Galileo 开发板上。然后就可以开始了。此外,还有一个软件包存储库,您可以从中将更多软件包安装到您的映像中,例如,在添加以下行之后
# cat >> /etc/opkg/iotdk.conf <<EOF src/gz all http://iotdk.intel.com/ipk/all src/gz i586 http://iotdk.intel.com/ipk/i586 src/gz clanton http://iotdk.intel.com/ipk/clanton EOF
添加到您的 /etc/opkg/iotdk.conf 文件中,如 http://software.intel.com/sites/default/files/managed/f1/49/building_yocto_and__ipks.pdf(“使用 IOTDL 构建的存储库”部分)中所述,您就可以使用 opkg 从该存储库添加更多软件包,方法如下
# opkg install <package name>
要获取软件包列表,您可以使用
# opkg list
除此之外,在 http://software.intel.com/en-us/iotdevkit 上还有一个实时映像,包括编译 Galileo 目标的自有二进制文件所需的所有设置。
如何自己进行 Yocto 构建
但是,在某些情况下,上述方法可能无法完全满足您的需求,您可能希望自定义映像或轻松构建自己的 ipk 软件包...
这时您可能需要自己运行 Yocto 构建。对于 Yocto 初学者,我想推荐 Yocto 项目的在线文档(当前为 http://www.yoctoproject.org/docs/1.5.1/dev-manual/dev-manual.html)。这里不是教授 Yocto 概念的地方。但我尝试做的是分享一些提示,让您入门。
初始 Yocto 构建
如果要构建映像,您至少应有 40 GB 的可用磁盘空间。您需要安装各种开发工具(如 git)才能开始使用 Yocto。要从 intel-iot-devkit 开始,请转到 http://git.yoctoproject.org/cgit/cgit.cgi/meta-intel-iot-devkit/,您可以在那里找到 git 克隆的 git 详细信息。在我的系统上,我的 Yocto 构建根目录位于
YBR = /Quark/meta-intel-iot-devkit/
注意
除了 master 之外,还有其他分支。
您可以按照下面的步骤构建映像
- 检查 ${YBR}/build/conf/local.conf 配置。您可能需要修改并行构建的设置
- 通过 sourcing 设置 Yocto 构建环境
source ${YBR}/iot-devkit-init-build-env
- 这会将您的 pwd 直接更改为 ${YBR}/build。现在您可以使用 bitbake 开始构建,例如
bitbake iot-devkit
- 现在稍作休息(或者喝杯咖啡)- 如果没有问题,您将在 ${YBR}/build/tmp/deploy/images 中找到您的已完成映像,并在 ${YBR}/build/tmp/deploy/ipk 中找到 ipk 软件包。根据您的构建系统,这可能需要几个小时。
检查可用的层
Yocto 使用各种所谓的层来组织软件包。您可以在 http://layers.openembedded.org/layerindex/branch/master/layers/ 找到各种可用的层。
在我们的例子中,您可以找到一个 meta-oracle-java 层,这是我们要构建的 Java 软件包的一个很好的起点。我们将使用和修改此层,使用下面的步骤。要编写您自己的层,请查看 Yocto 手册。
- 将该层 git 克隆到 ${YBR} 中。
- 将该层添加到 ${YBR}/build/conf/bblayers.conf 中的 BBLAYERS 变量中
- 由于 Oracle Java 带有专有许可证,因此您必须通过在 ${YBR}/build/conf/local.conf 中添加 LICENSE_FLAGS_WHITELIST += "oracle_java" 来将该许可证列入白名单
- 不幸的是,meta-oracle-java 层似乎有点过时 - 特别是,JRE 的直接下载链接不再有效。似乎您需要先接受许可才能从 Oracle 下载 JRE。因此,我下载了 tgz 并将其放在本地文件夹中。显然,需要相应地修改 meta-oracle-java/recipes-devtools/oracle-java/oracle-jse-jre-i586_1.7.0.bb 中的 URI 条目(在我的例子中为 SRC_URI = "file:///Quark/meta-intel-iot-devkit/meta-oracle-java/jre-7u51-linux-i586.tgz")。还需要相应地修改 meta-oracle-java/recipes-devtools/oracle-java/oracle-jse.inc 中的 md5 校验和和 LIC_FILES_CHKSUM 许可证哈希。最简单的方法是先保持不变,bitbake 将打印一条错误消息,其中包括正确的新哈希。
之后,您应该会看到类似的内容
$ bitbake-layers show-layers layer path priority ========================================================================== meta /Quark/meta-intel-iot-devkit/meta 5 meta-oe /Quark/meta-intel-iot-devkit/meta-oe 6 meta-iot-devkit /Quark/meta-intel-iot-devkit/meta-iot-devkit 6 meta-yocto /Quark/meta-intel-iot-devkit/meta-yocto 5 meta-intel /Quark/meta-intel-iot-devkit/meta-intel 5 meta-clanton-bsp /Quark/meta-intel-iot-devkit/meta-clanton-bsp 6 meta-galileo /Quark/meta-intel-iot-devkit/meta-galileo 9 meta-hob /Quark/meta-intel-iot-devkit/meta-hob 1 meta-oracle-java /Quark/meta-intel-iot-devkit/meta-oracle-java 6
然后您就可以使用
$ ${YBR}/bitbake oracle-jse-jre-i586
成功后,您将在 ${YBR}/build/tmp/deploy/ipk 中找到新软件包。您可以将此软件包复制到您的系统并使用 opkg 安装它。
成功安装后,我们现在可以在目标上运行 Java - 在这里使用强制性的起点 Java 类
# /usr/jre1.7.0_51/bin/java hello Hello World