首页 > 解决方案 > 如何将外部构建的应用程序包含到 Yocto 项目/OpenEmbedded Linux 内核映像中

问题描述

我有一个 C/C++ 应用程序,它最初是几年前为 LynxOs 构建的。该应用程序所针对的硬件现已报废,我的任务是将该应用程序移植到使用嵌入式 linux 内核的 Abaco 的 PPC11A powerpc 板。

我有一个来自 Abaco 的板级支持包,它建立在 Yocto 项目的旧版本 (2.3.3) 之上,并且我已经能够使用 BSP 构建内核映像。我还能够从我的构建目录创建一个跨工具链安装程序,并且我已经能够使用跨工具链编译/链接应用程序。

此时,我有一个内核映像构建的构建目录,并且我有一个完全独立的应用程序构建区域。现在,我试图弄清楚我需要做什么才能将应用程序的可执行文件、库、配置文件等集成到内核映像中。

请注意,我是 Yocto 项目和 OE 的新手,到目前为止,我所做的一切都是基于我在 Yocto 文档、在线论坛甚至我购买的一本书中阅读的内容。我找到了很多关于如何设置和使用 Eclipse 进行应用程序开发的信息,但在我工作的环境中这是不可能的。

对于我所阅读的内容,我假设我需要(或应该)为我的应用程序创建一个新层,然后我需要创建某种配方来将应用程序安装到内核的文件系统中。我确实在我读过的书中找到了一个示例,该示例使用 bin_package 来获取、解包和安装外部构建的包,这基本上是我需要做的,除了我的应用程序当前没有构建为软件包.

附加 说明 我正在使用的应用程序是一个简单的 makefile 应用程序(即没有自动工具),并且由于各种原因,它将在嵌入式 linux 内核映像构建之外构建。我只需要弄清楚如何编写一个方法来将应用程序的可执行文件、库、配置和数据文件(所有本地文件)安装到内核映像的根文件系统中。

任何我可能尚未看到的建议、具体示例或指向其他来源的链接将不胜感激。

谢谢你。

标签: linux-kernelyoctoopenembedded

解决方案


您是对的,最佳实践总是为您的项目创建新层,其中包含特定 C++ 应用程序的配方以及其他项目需求。

您可以创建一个简单的图层:

bitbake-layers create-layer meta-custom-layer

然后将其添加到您的 bblayers.conf 文件中:

bitbake-layers add-layer meta-custom-layer

现在您需要为您的应用程序创建一个配方。您的应用程序是用 C++ 编写的,因此您必须提及它是使用简单的 Makefile 还是 cmake 构建。

了解构建类型将帮助您创建配方,因为 Yocto 有一个现成的类,可用于配置和构建众所周知的构建类型。

Cmake 配方的一个很好的例子可以在这里找到。Makefile (autotools) 配方的一个很好的例子可以在这里找到。

如果您不想使用自动 Yocto 类,您可以创建自己的构建过程。在这里可以找到一个完美的答案,其中有很多很好的例子。

另一件事,您需要指定应用程序的来源,它可以来自 git 存储库或本地文件。这两种情况都在前面的示例链接中。

正确构建最终配方后,您可以专注于do_install函数,您可以指定将应用程序集成到 rootfs 的位置。

最后,您可以为您的项目创建自定义图像以添加您的食谱。可以在这里找到一个非常详细的示例以及 Toradex 创建配方、层、使用内核等的其他示例。

我希望这将有助于您更多地了解图层、食谱等


推荐阅读