【问题标题】:Yocto: how to remove/blacklist some dependency from RDEPENDS of a package?Yocto:如何从包的 RDEPENDS 中删除/黑名单一些依赖项?
【发布时间】:2017-03-24 04:10:58
【问题描述】:

我有一个基于https://github.com/jumpnow/meta-wandboard 的自定义机器层。

我已将内核升级到 4.8.6,并希望将 X11 添加到映像中。 我正在修改图像配方 (console-image.bb)。 由于 wandboard 基于 i.MX6,我想包含来自 meta-fsl-armxf86-video-imxfb-vivante 包。 但是,它无法抱怨无法构建kernel-module-imx-gpu-viv。我相信这是因为xf86-video-imxfb-vivante 依赖于imx-gpu-viv,而后者又依赖于kernel-module-imx-gpu-viv

我意识到这些依赖项是使用 meta-fsl-arm BSP 和 vanilla Poky 发行版创建的。但是这些东西对于 wandboard 来说已经过时了,因此我正在使用带有现代内核的自定义机器层。 内核配置为包含 Vivante DRM 模块,我真的不希望构建 kernel-module-imx-gpu-viv 包。

有没有办法将其从 RDEPENDS 中排除?我能以某种方式向构建系统发誓,我将自己处理这个特定的运行时依赖项吗?

我已经尝试在我的 local.conf 中将“kernel-module-imx-gpu-viv”设置PNBLACKLIST[kernel-module-imx-gpu-viv] 列入黑名单,但这只是解决方案的一部分。它有助于避免构建失败,但打包过程仍然失败。

【问题讨论】:

  • 你能给我贴一下 log.do_package 和 run.do_package 的日志吗?

标签: yocto bitbake openembedded imx6


【解决方案1】:

IIUC 你的问题来自img-gpu-viv recipe

FILES_libgal-mx6 = "${libdir}/libGAL${SOLIBS} ${libdir}/libGAL_egl${SOLIBS}"
FILES_libgal-mx6-dev = "${libdir}/libGAL${SOLIBSDEV} ${includedir}/HAL"
RDEPENDS_libgal-mx6 += "kernel-module-imx-gpu-viv"
INSANE_SKIP_libgal-mx6 += "build-deps"

我实际上将这个RDEPENDS 定义为一个错误,通常内核模块依赖项被指定为RRECOMMENDS,因为大多数模块都可以编译到内核中,因此在仍然提供功能的同时根本不需要单独的包。但这是另一个问题。

有几种方法可以解决这个问题,第一个通用方法是调整包的 RDEPENDS。它只是一个 bitbake 变量,因此您可以使用assign it some other valueremove some portion of it。在第一种情况下,它看起来有点像这样:

RDEPENDS_libgal-mx6 = ""

第二个:

RDEPENDS_libgal-mx6_remove = "kernel-module-imx-gpu-viv"

显然,这两个选项对您现在和未来的工作有不同的影响。一般来说,我会选择较软的第二个,因为当您要更新meta-fsl-arm 层时,它损坏的可能性较小,它可以以任何方式更改imx-gpu-viv 配方。但是,当您使用变量中的大列表覆盖一些更复杂的配方并且您正在对其进行大量修改(不仅仅是删除一两个东西)时,通过变量的完全硬分配来维护它可能会更容易。

现在还有一个在哪里 来做这个变量修饰的问题。主要选项是.bbappend in your layer,这就是追加的用途,但您也可以从您的发行版配置中执行此操作(如果您要维护自己的发行版,将所有这些调整集中在一个地方可能会更容易,而不是喷洒到许多附加)或来自您的local.conf(这是一个快速尝试的好地方,但可能不是长期使用的东西)。我通常使用.bbappend

但也有一个完全不同的方法来解决这个问题,而不是修复包依赖关系,你也可以修复 some other package provides。例如,如果您将内核配置为将 imx-gpu-viv 模块直接内置到主 zimage 中,您可以这样做

RPROVIDES_kernel-image += "kernel-module-imx-gpu-viv"

(也在.bbappend,发行版配置或local.conf)就是这样。

无论如何,您解决此问题的方法应该反映您的设置和配方假设之间的差异。如果您确实有该模块,但在不同的包中,则选择RPROVIDES,如果您有其他模块提供与libgal-mx6 包相同的功能,则修复libgal-mx6 依赖项(最好修复 它们,意味着不仅要删除你不需要的东西,还要添加与你的设置相关的东西)。

【讨论】:

  • 非常感谢您提供如此详尽的答案!尽管我意识到我走错了路,因为现代内核采用了 i.MX6 的 KMS 和“etnaviv”方式,但您的回答无论如何都非常有帮助。我不知道_remove 后缀,所以我使用python 代码来做同样的事情。您的解决方案更清洁。再次感谢。
猜你喜欢
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 2022-09-23
  • 2019-11-13
相关资源
最近更新 更多