簡體   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