Eingebettete Software - Yocto-Rezeptabhängigkeit ein Screenshot eines Computers

Abhängigkeiten von Yocto-Recipes

So erhalten Sie die Abhängigkeiten zwischen den Recipe-Variablen

Wollten Sie jemals Variablen in anderen Recipes mit Variablen in Ihrem individuellen Meta-Layer überschreiben, aber es passiert nichts?

Sie müssen nicht an sich zweifeln – überprüfen Sie die Priorität der verwendeten Meta-Layer.

Beispiel

Wir wollen eine Yocto-Linux-Distribution für Raspberry Pi 4 erstellen und das Hintergrundbild des psplash-Rezepts ändern. Um dies zu tun, erstellen wir den Ordner „psplash“ in unserer individuellen Metaschicht „meta-interelectronix“ und fügen die Datei „psplash_%.bbappend“ hinzu, um die Variablen von „SPLASH_IMAGES“ zu überschreiben.

SPLASH_IMAGES:rpi = "file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"

Nach Hinzufügen von „meta-interelectronix“ zu „bblayers.conf“ nutzen wir BitBake für die Linux-Distribution, flashen sie auf eine SD-Karte und booten Raspberry Pi 4 damit.

Aber es wird kein individuelles Hintergrundbild für den Startbildschirm verwendet – warum das?

Warum verhält es sich so?

Nach der Suche nach dem „Fehler“ sehen wir uns die Variable für die Priorität der Meta-Layer genauer an. Meta-Layer haben eine Variable für die Priorität, damit festgelegt werden kann, in welcher Reihenfolge die Meta-Layer bei der Nutzung von BitBake für die Linux-Distribution verwendet wird.

Die Variable wird in der Datei „meta-interelectronix/conf/layer.conf“ festgelegt:

BBFILE_PRIORITY_meta-interelectronix = "6"

In unserem Fall wurde die Priorität von „meta-interelectronix“ auf „6“ und die Priorität von „meta-raspberrypi“ auf „9“ eingestellt.

Je höher die Priorität, desto später wurden die Variablen der bbappend-Dateien auf BitBake angewendet. Da es sich bei „meta-raspberrypi“ auch um eine „psplash_%.bbappend“-Datei handelt, überschreiben die Variablen dieser Datei die Überschreibungen in unserer „meta-interelectronix“-Schicht wieder, sodass sich nichts ändert.

Hinweis

Ändern Sie die Priorität Ihres individuellen Meta-Layer zu einer hohen Zahl, z. B. 50, um Ihre Änderungen später als alle Überschreibungen von fremden Meta-Layern anzuwenden.

Wie kann man den Rang der Variablen auf einfache Weise erhalten?

Es gibt einen einfachen Befehl, mit dem man den Rang einer Variablen bei allen Meta-Layern erhalten kann:

bitbake-getvar -r recipe VARIABLE

In unserem Fall lautete der Befehl:

bitbake-getvar -r psplash SPLASH_IMAGES

Das Ergebnis nach der Änderung der Priorität der „meta-interelectronix“-Schicht auf „50“ sieht so aus:

bitbake-getvar -r psplash SPLASH_IMAGES
#
# $SPLASH_IMAGES [4 operations]
#   set /workdir/poky-kirkstone/meta/recipes-core/psplash/psplash_git.bb:19
#     "file://psplash-poky-img.h;outsuffix=default"
#   set /workdir/poky-kirkstone/meta-interelectronix/recipes-core/psplash/psplash_%.bbappend:10
#     "file://psplash-ixlogo-white-img.h;outsuffix=interelectronix"
#   override[rpi]:set /workdir/poky-kirkstone/meta-raspberrypi/recipes-core/psplash/psplash_%.bbappend:2
#     "file://psplash-raspberrypi-img.h;outsuffix=raspberrypi"
#   override[rpi]:set /workdir/poky-kirkstone/meta-interelectronix/recipes-core/psplash/psplash_%.bbappend:9
#     "file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"
# pre-expansion value:
#   "file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"
SPLASH_IMAGES="file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"

Sie können die Priorität der verwendeten Schichten auch mit dem folgenden Befehl anzeigen:

bitbake-layers show-layers

Urheberrechtslizenz

Copyright © 2022 Interelectronix e.K.
Dieser Projekt-Quellcode ist unter der GPL-3.0 Lizenz lizenziert.