2017-09-14 56 views
1

我想爲新機器添加一些從上游獲取的圖層(稱爲A),主要是爲了使用機器從這些圖層提供的配置文件,內核和u-boot。但是,新圖層有幾個bbappend文件(也包含bb文件),該版本與我的yocto項目中其他機器的圖層不同。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。因此,在知道將要構建的機器之前,會部署這些圖層。

我的問題是如何讓那些以機只有一個工作新增加的層,但不會得到由其他機器使用。

回答

0

如果正在使用該層中的任何機器,您應該嘗試使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只被用於那臺特定的機器。

+0

COMPATIBLE_MACHINE是有意義的。然而,我的道歉,我的情況是大多數層(不僅是機器)從上游取(我修改了一下問題),我不想在本地更改上游bbappend文件。我怎麼能實現它?有沒有像local.conf,我可以在全局進行更改,而不是修改層中的文件? –

+0

那麼,層是通用層,但您希望它們僅應用於單臺機器?還是他們是機器特定的層,即上游聲稱是機器特定的層? – Anders

0

爲我的作品的解決方案是使用DISTRO功能從yocto。它很靈活。我所做的是使用不同的DISTROmachine_A(使用一個不同的配置文件的意思),然後包括MACHINE_A.incBBMASK = ""(或BBMASK = "layers that not for A")。

在默認的Poky DISTRO中,在bblayers.conf文件中,我使用BBMASK = "all machine_A's layers"來阻止machine_A引入的所有圖層。

在local.conf中,我設置DISTRO_machine_A = "MACHINE_A",使構建圖像machine_A時,將bitbake的調查DISTRO並找到machine_A配置文件,這將重置全局BBMASK,使層爲machine_A本身(甚至阻止其他層)。

通過使用DISTRO,我可以在爲項目引入新圖層的同時爲不同的機器獲得單獨的構建環境。有點像BBMASK_machine_ABBMASK_machine_A不會像我描述的問題那樣工作)。