linux-kernel - 如何将外部构建的应用程序包含到 Yocto 项目/OpenEmbedded Linux 内核映像中
问题描述
我有一个 C/C++ 应用程序,它最初是几年前为 LynxOs 构建的。该应用程序所针对的硬件现已报废,我的任务是将该应用程序移植到使用嵌入式 linux 内核的 Abaco 的 PPC11A powerpc 板。
我有一个来自 Abaco 的板级支持包,它建立在 Yocto 项目的旧版本 (2.3.3) 之上,并且我已经能够使用 BSP 构建内核映像。我还能够从我的构建目录创建一个跨工具链安装程序,并且我已经能够使用跨工具链编译/链接应用程序。
此时,我有一个内核映像构建的构建目录,并且我有一个完全独立的应用程序构建区域。现在,我试图弄清楚我需要做什么才能将应用程序的可执行文件、库、配置文件等集成到内核映像中。
请注意,我是 Yocto 项目和 OE 的新手,到目前为止,我所做的一切都是基于我在 Yocto 文档、在线论坛甚至我购买的一本书中阅读的内容。我找到了很多关于如何设置和使用 Eclipse 进行应用程序开发的信息,但在我工作的环境中这是不可能的。
对于我所阅读的内容,我假设我需要(或应该)为我的应用程序创建一个新层,然后我需要创建某种配方来将应用程序安装到内核的文件系统中。我确实在我读过的书中找到了一个示例,该示例使用 bin_package 来获取、解包和安装外部构建的包,这基本上是我需要做的,除了我的应用程序当前没有构建为软件包.
附加 说明 我正在使用的应用程序是一个简单的 makefile 应用程序(即没有自动工具),并且由于各种原因,它将在嵌入式 linux 内核映像构建之外构建。我只需要弄清楚如何编写一个方法来将应用程序的可执行文件、库、配置和数据文件(所有本地文件)安装到内核映像的根文件系统中。
任何我可能尚未看到的建议、具体示例或指向其他来源的链接将不胜感激。
谢谢你。
解决方案
您是对的,最佳实践总是为您的项目创建新层,其中包含特定 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 创建配方、层、使用内核等的其他示例。
我希望这将有助于您更多地了解图层、食谱等
推荐阅读
- automation - 使用 InDesign 数据合并导出多个文件
- visual-studio - Visual Studio 2019:我在哪里可以关闭“共享编译”
- google-apps-script - 谷歌表格导出为 txt
- python - 在Python中将矩阵中的每个元素相乘
- python - keras load_model TypeError:int()参数'NoneType'
- php - 使用 php 从两个 db 表中查询
- c - 在 C 中读取具有不一致输入的文件
- javascript - 将表单重定向到 Gatsby 中的唯一 URL?
- c++ - 如何将此函数重写为c ++中的指针?
- python - 需要 Selenium 和基本的 python 帮助