我想从上游为新机器添加一些图层提取(称之为A),主要是为了使用机器从这些层提供的配置文件,内核和u-boot。但是,新图层有几个bbappend文件(也包含bb文件),该版本与我的yocto项目中的其他机器图层不同。
例如,计算机A 有自己的 gstreamer1.0_1.8.1.bb 和bbappend文件。 其他计算机正在使用 gstreamer1.0_1.6.1.bb 。当我为其他机器构建映像时会发生什么,它构建了1.8.1版本,因为Yocto将始终寻找最新的兼容版本的包并构建它。但是,gstreamer1.0_1.8.1.bbappend文件是专门为机器A编写的,不适用于其他人并导致错误。不仅是gstreamer,还有更多。
我在bblayers.conf文件中有一个像BBLAYERS_A += "new_layers \ ..."
这样的想法,但遗憾的是它不能按照我想要的方式工作。
我的另一个想法是:
BBMASK_B = "new_layers \ ..."
BBMASK_C = "new_layers \ ..."
BBMASK_D = "new_layers \ ..."
BBMASK_E = "new_layers \ ..."
BBMASK_F = "new_layers \ ..."
BBMASK_G = "new_layers \ ..."
BBMASK_H = "new_layers \ ..."
BBMASK_I = "new_layers \ ..."
...
这对我来说并不好看,我怀疑它不会起作用。我认为构建过程首先加载bblayers.conf文件,然后加载local.conf。因此,在了解要构建的机器之前,将部署这些层。
我的问题是如何才能使这些新添加的图层仅与计算机A 一起使用,但不会被其他计算机使用。
答案 0 :(得分:1)
如果正在使用该层中的任何机器,您应该尝试使BSP层仅产生任何效果。
在您的示例gstreamer1.0_1.8.1.bb
中,您应该添加
COMPATIBLE_MACHINE = "^machinea$"
请注意,这是一个正则表达式,因此省略前导^
和结束$
,您可能会错误地匹配类似的命名机器。
另请注意,我将机器名称A
的示例更改为machinea
,因为计算机需要是小写字母。
如果您要添加.bbappend
个文件,通常会让他们通过例如
SOME_VAR_machinea
如果您要覆盖文件,通常会将它们放在以下结构中:
recipes-support/myrecipe/myrecipe/machinea/some-file
在这种情况下,请注意额外的子目录machinea
,这将确保some-file
仅用于该特定计算机。
答案 1 :(得分:1)
适用于我的解决方案是使用yocto中的DISTRO功能。它很灵活。我所做的是为DISTRO
使用不同的machine_A
(意味着为A使用不同的配置文件),然后包含MACHINE_A.inc
BBMASK = ""
(或BBMASK = "layers that not for A"
)。
在bblayers.conf文件中的默认Poky DISTRO
中,我使用machine_A
阻止BBMASK = "all machine_A's layers"
引入的所有图层。
在local.conf中,我设置了DISTRO_machine_A = "MACHINE_A"
,因此在构建machine_A
的图片时,bitbake会查看DISTRO
并找到machine_A
的配置文件,这将重置全局BBMASK
以启用machine_A
本身的图层(甚至阻止其他图层)。
通过使用DISTRO
,我可以为不同的计算机获取单独的构建环境,同时将新图层引入项目中。有点像BBMASK_machine_A
(BBMASK_machine_A
实际上并没有像我描述的问题一样工作。)