2017-09-14 3 views
1

Je veux ajouter quelques calques chercher en amont pour une nouvelle machine (appelez-la A) principalement juste pour utiliser la machine Un fichier configure, noyau et u-boot fournis à partir de ces calques. Cependant, les nouvelles couches ont plusieurs fichiers bbappend (avec des fichiers bb aussi) que la version est différente avec les couches d'autres machines dans mon projet yocto.Calques spécifiques à la machine dans yocto

Par exemple, la machine A a son propre fichier gstreamer1.0_1.8.1.bb et bbappend. Les autres machines utilisent gstreamer1.0_1.6.1.bb. Ce qui se passe quand je construis l'image pour l'autre machine est qu'elle construit la version 1.8.1 parce que Yocto cherchera toujours la nouvelle version compatible du paquet et le construira. Cependant, le fichier gstreamer1.0_1.8.1.bbappend est écrit spécifiquement pour la machine A, ne s'applique pas aux autres et provoque des erreurs. Non seulement le gstreamer, il y en a plus.

J'ai une idée comme BBLAYERS_A += "new_layers \ ..." dans le fichier bblayers.conf, mais malheureusement, cela ne fonctionne pas comme je le souhaite.

Une autre idée que j'ai est comme:

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 \ ..." 
... 

Il ne semble pas bon pour moi et je doute qu'il ne fonctionnera pas aussi bien. Je pense que la procédure de construction consiste à charger le fichier bblayers.conf en premier, puis le fichier local.conf. Par conséquent, avant de savoir quelle machine il va construire, les couches sont déployées.

Ma question est de savoir comment puis-je faire ces couches nouvellement ajoutées qui travaillent avec machine A seulement, mais ne me utilisé par les autres machines .

Répondre

0

Vous devez essayer de créer une couche BSP pour provoquer uniquement des effets si l'une des machines de cette couche est utilisée.

Dans votre exemple, gstreamer1.0_1.8.1.bb, vous devez ajouter

COMPATIBLE_MACHINE = "^machinea$" 

note, il est une expression régulière, donc en omettant le premier ^ et se terminant $, vous pouvez par correspondance erreur machines similaires nommées.

Notez également que j'ai changé votre exemple de nom de machine A en machinea, car les machines doivent être en minuscules.

Si vous ajoutez des fichiers .bbappend, vous les avez généralement modifier la construction par exemple.

SOME_VAR_machinea 

Si vous êtes des fichiers remplaçant, vous les mettez généralement dans une structure comme:

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

Dans ce cas, notez le sous-répertoire supplémentaire machinea, qui veillera à ce que some-file est seulement utilisé pour cette machine particulière.

+0

La COMPATIBLE_MACHINE a du sens. Cependant, mes excuses, mon cas est que la plupart des couches (pas seulement pour le Machinea) vont chercher en amont (j'ai un peu modifié la question) et je ne veux pas changer les fichiers bbappend en amont localement. Comment pourrais-je y arriver? Y at-il comme le local.conf que je peux faire des changements globalement au lieu de modifier des dossiers dans des calques? –

+0

Eh bien, les couches sont-elles génériques, bien que vous vouliez qu'elles ne s'appliquent qu'à une seule machine? Ou sont-ils des couches spécifiques à la machine, c'est-à-dire que les couches en amont sont considérées comme des couches spécifiques à la machine? – Anders

0

La solution qui fonctionne pour moi est d'utiliser la fonctionnalité DISTRO de yocto. C'est flexible. Ce que j'ai fait est d'utiliser DISTRO différent pour machine_A (ce qui signifie en utilisant un fichier de configuration différent pour A), puis d'inclure un MACHINE_A.inc avec BBMASK = "" (ou BBMASK = "layers that not for A").

Dans la version par défaut de Poky DISTRO, dans le fichier bblayers.conf, je bloque toutes les couches introduites par machine_A en utilisant BBMASK = "all machine_A's layers".

Dans le local.conf, je mis DISTRO_machine_A = "MACHINE_A", donc lors de la construction de l'image pour machine_A, bitbake se penchera sur DISTRO et trouver le fichier de configuration pour machine_A qui réinitialisera le BBMASK global pour permettre aux couches pour lui-même machine_A (ou même bloquer les autres couches). En utilisant DISTRO, je peux obtenir un environnement de construction séparé pour différentes machines tout en introduisant de nouvelles couches dans le projet. Un peu comme BBMASK_machine_A (BBMASK_machine_A ne fonctionnera pas réellement comme ma question décrite).