我有一个基于https://github.com/jumpnow/meta-wandboard的自定义机器层。
我已将内核升级到4.8.6并想要将X11添加到图像中。
我正在修改图像配方(console-image.bb
)。
由于wandboard基于i.MX6,我想要包含xf86-video-imxfb-vivante
中的meta-fsl-arm
包。
但是,它无法抱怨无法构建kernel-module-imx-gpu-viv
。我认为这是因为xf86-video-imxfb-vivante
依赖于imx-gpu-viv
而kernel-module-imx-gpu-viv
上的RDEPENDS。
我意识到这些依赖关系是使用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]
,但这只是解决方案的一部分。它有助于避免构建失败,但打包过程仍然失败。
答案 0 :(得分:7)
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 value或remove some portion of it。在第一种情况下,它看起来会像这样:
RDEPENDS_libgal-mx6 = ""
在第二个:
RDEPENDS_libgal-mx6_remove = "kernel-module-imx-gpu-viv"
显然,这两个选项对您现在和将来的工作有不同的含义。一般情况下,我会选择较软的第二种,因为当你要更新meta-fsl-arm
图层时,它可能会有更少的破损,这可能会以任何方式更改imx-gpu-viv
食谱。但是当你用变量中的大列表覆盖一些更复杂的配方并且你正在大量修改它时(不只是删除一两件事),通过完全硬分配变量来维护它可能更容易。
现在还有一个问题 where 来做这个变量修改。主要选项是.bbappend
in your layer,这是追加的内容,但您也可以从发行版配置中执行此操作(如果您维护自己的发行版,则可能更容易将所有这些调整放在一个位置,而不是而不是喷洒到许多附件中)或来自你的local.conf
(这是一个快速尝试它的好地方,但可能不会长期使用)。我通常使用.bbappend
。
但是对于这个问题也有一种完全不同的方法,而不是修复包依赖关系,你也可以修复some other package provides。例如,如果您将内核配置为在主zimage中内置imx-gpu-viv
模块,则可以执行
RPROVIDES_kernel-image += "kernel-module-imx-gpu-viv"
(也在.bbappend
,发行版配置或local.conf
)就是这样。
无论如何,您解决此问题的方法应该反映您的设置和配方假设之间的差异。如果你有这个模块,但是在另一个软件包中,那么去RPROVIDES
,如果你有一些其他模块为libgal-mx6
软件包提供相同的功能,那么就修复libgal-mx6
个依赖项(并且它是最好修复它们,这意味着不仅要删除你不需要的东西,还要添加与你的设置相关的东西。