yocto - 配方还产生需要包装的本地输出

标签 yocto bitbake openembedded

我有一个配方,可以成功调用旧版构建命令来交叉编译目标。

作为副作用,它会生成一些在构建中使用的自定义 native 工具。

我想将这些工具收集到 -tools-native 包中,以允许其他配方依赖主包来访问工件,并使用 -tools-native > 打包以进一步处理这些工件。

我只需添加以下内容即可构建这样的 native 包:

PROVIDES = "${PN} ${PN}-tools-native"
SYSROOT_DIRS += "/"
PACKAGES += "${PN}-tools-native"
FILES_${PN}-tools-native += "/native-bin/*"

并让安装部分将 native 工具安装到/native-bin/

但它在某种程度上并不是一个真正的 native 包,当依赖由附加配方决定时,native-bin 工件会安装在recipe-sysroot而不是recipe-sysroot-native`

我还必须安装工具 0644 或 bitbake 尝试删除它们(但失败了,因为它们是 native 构建)。

由于 native 工具已由旧版构建命令生成,因此我不需要实际作为 -native 配方变体进行调用。

这是一个漫长的过程,我也不想运行两次。

目前,我通过将其他食谱DEPEND放在recipe-native-tools上来解决这个问题,并修复权限和路径

但是执行此操作的正确方法是什么?

最佳答案

这通常由单独的配方处理。没有机制可以共享目标配方中的 native 二进制文件,因为它们的任务哈希中包含错误类型的信息(它们根据目标架构而变化)。

目标配方不会将其 bindir/sbindir 安装到 sysroot 中,因为我们无法运行它们,并且正如您所提到的,它们是错误的架构,因此它们会混淆 strip 等。

您可以尝试使用一个依赖于此目标配方的 native 配方,并将目标配方保存的二进制文件安装到 do_install 的 ${D} 中。这很可能会发出一些警告,因为一般来说,原生配方不应该依赖于目标配方,但如果你不能构建两次,这可能是你最好的选择。

关于yocto - 配方还产生需要包装的本地输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971910/

相关文章:

openembedded - 在 OpenEmbeded/yocto 中哪里可以看到 do_rootfs 程序 [复制的文件路径] 的详细信息?

linux-kernel - 尝试将 Linux menuconfig 与 yocto/morty 一起使用

linux - 为什么 yocto 补丁在 devtool 下会失败,但在正常构建期间不会?

yocto - 如何更改基于 autotools 的 Bitbake 配方的安装路径?

linux - 在 Yocto 中扩展 Linux 版本的最简单方法

yocto - 如何将配方限制为仅本地和 nativesdk?

yocto - 如何管理 yocto 项目的元层并在 git 中构建配置

linux - 在 Yocto 生成的图像中添加分区

docker - 在 Docker 中运行 Yocto, "make menuconfig"失败

symlink - 在 bitbake 配方中创建符号链接(symbolic link)