繁体   English   中英

yocto中的机器特定层

[英]Machine specific layers in yocto

我想从上游为新机器添加一些层提取(称之为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一起使用,但不会被其他机器使用

如果正在使用该层中的任何机器,您应该尝试使BSP层仅产生任何效果。

在您的示例中, gstreamer1.0_1.8.1.bb ,您应该添加

COMPATIBLE_MACHINE = "^machinea$"

注意,它是一个正则表达式,因此通过省略前导^和结束$ ,您可以错误地匹配类似的命名机器。

另请注意,我将机器名A示例更改为machinea ,因为机器需要是小写字母。

如果您要添加.bbappend文件,通常.bbappend他们通过例如修改构建。

SOME_VAR_machinea

如果您要覆盖文件,通常将它们放在如下结构中:

recipes-support/myrecipe/myrecipe/machinea/some-file

在这种情况下,请注意额外的子目录machinea ,它将确保some-file仅用于该特定计算机。

适合我的解决方案是使用yocto的DISTRO功能。 它很灵活。 我所做的是为machine_A使用不同的DISTRO (意味着为A使用不同的配置文件),然后包括带有BBMASK = ""MACHINE_A.inc (或BBMASK = "layers that not for A" )。

在默认的Poky DISTRO ,在bblayers.conf文件中,我使用BBMASK = "all machine_A's layers"BBMASK = "all machine_A's layers" 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_ABBMASK_machine_A实际上不会像我描述的问题那样工作)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM