2017-09-14 12 views
1

主にマシンAの設定ファイル、カーネル、それらのレイヤーから提供されるu-bootを使用するために、新しいマシンの上流からいくつかのレイヤーフェッチを追加したい(Aと呼ぶ)。しかし、新しいレイヤーには、yoctoプロジェクトの他のマシンのレイヤーと異なるバージョンのbbappendファイル(bbファイルもあります)があります。例えばyoctoのマシン固有のレイヤー

マシンはは独自のgstreamer1.0_1.8.1.bbとbbappendファイルを持っています。 他のマシンが使用されていますgstreamer1.0_1.6.1.bbです。他のマシンのイメージをビルドすると、Yoctoは常に最新の互換バージョンのパッケージを探してビルドするので、バージョン1.8.1をビルドするということです。しかし、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 

ファイルを上書きしている場合は、通常のような構造に入れ:some-fileのみに使用されていることを保証しますこれは、余分なサブディレクトリmachineaに注意し、この場合、

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

その特定のマシン。

+0

COMPATIBLE_MACHINEは意味があります。しかし、私の謝罪は、私のケースはほとんどのレイヤー(machineaだけでなく)が上流からフェッチしている(私はちょっと質問を修正した)。上流のbbappendファイルをローカルに変更したくない。どうすれば達成できますか?レイヤー内のファイルを変更するのではなく、変更をグローバルに行うことができるlocal.confがありますか? –

+0

レイヤーは一般的なレイヤーですか、単一のマシンにのみ適用したいのですか?または、マシン固有のレイヤーですか?つまり、アップストリームがマシン固有のレイヤーであると主張されていますか? – Anders

0

私のために働く解決策は、yoctoのDISTRO機能を使用することです。柔軟です。私がしたのは、machine_A(別の設定ファイルを使用することを意味する)に異なるDISTROを使用し、次にBBMASK = ""(またはBBMASK = "layers that not for A")でMACHINE_A.incを含めることです。

デフォルトのPoky DISTROでは、bblayers.confファイル内で、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のように実際には私の質問として記述されません)。

関連する問題