
Stalo se vám někdy, že jste ve své vlastní metavrstvě vytvořili přepsání proměnných receptu a nic se nestalo?
Nepochybujte o sobě a podívejte se na prioritu použitých meta-vrstev.
Příklad
Chceme vytvořit distribuci Yocto Linux pro Raspberry Pi 4 a změnit obrázek na pozadí receptu na psplash. Za tímto účelem vytvoříme složku 'psplash' v naší vlastní meta-vrstvě 'meta-interelectronix' a přidáme soubor 'psplash_%.bbappend', abychom přepsali proměnné 'SPLASH_IMAGES'.
SPLASH_IMAGES:rpi = "file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"
Po přidání 'meta-interelectronix' do 'bblayers.conf' jsme bitbake linuxové distribuce, flash ji na SD kartu a bootujeme s ní Raspberry Pi 4.
Ale nebyl použit žádný vlastní obrázek na pozadí pro úvodní obrazovku - proč?
Co způsobuje toto chování?
Po vyhledání "chyby" se podíváme na proměnnou priority meta-vrstev. Meta-vrstvy mají proměnnou pro prioritu, která definuje, v jakém pořadí se meta-vrstva používá při bitbakování distribuce Linuxu.
Proměnná se nastavuje v souboru 'meta-interelectronix/conf/layer.conf':
BBFILE_PRIORITY_meta-interelectronix = "6"
V našem případě byla priorita "meta-interelectronix" nastavena na "6" a priorita "meta-malinpi" je nastavena na "9".Čím vyšší byla priorita, tím později byly proměnné bbappend souborů aplikovány na bitbake. Stejně jako v 'meta-raspberrypi' je také soubor 'psplash_%.bbappend', proměnné tohoto souboru přepíší přepsání v naší vrstvě 'meta-interelectronix' znovu, nic se nezmění.
Poznámka
Změňte prioritu vlastní meta-vrstvy na vysoké číslo, např. 50, aby se změny později aplikovaly jako všechny přepsání cizích meta-vrstev.
Existuje jednoduchý příkaz pro získání hodnocení proměnné přes všechny meta-vrstvy:
bitbake-getvar -r recipe VARIABLE
V našem případě byl příkaz:
bitbake-getvar -r psplash SPLASH_IMAGES
Výsledek po změně priority vrstvy "meta-interelectronix" na "50" vypadá takto:
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"
Prioritu použitých vrstev můžete také zobrazit následujícím příkazem:
bitbake-layers show-layers
Licence na autorská práva
Autorská práva © 2022 Interelectronix e.K.
Tento zdrojový kód projektu je licencován pod licencí GPL-3.0.