
Vytvorili ste niekedy prepísanie premenných receptov vo vlastnej metavrstve a nič sa nestane?
Nepochybujte o sebe a pozrite sa na prioritu použitých metavrstiev.
Príklad
Chceme vytvoriť distribúciu Yocto Linux pre Raspberry Pi 4 a zmeniť obrázok na pozadí receptu psplash. Aby sme to dosiahli, vytvoríme priečinok 'psplash' v našej vlastnej meta-vrstve 'meta-interelectronix' a pridáme súbor 'psplash_%.bbappend', aby sme prepísali premenné 'SPLASH_IMAGES'.
SPLASH_IMAGES:rpi = "file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"
Po pridaní 'meta-interelectronix' do 'bblayers.conf' bitbaujeme distribúciu Linuxu, flashujeme ju na SD kartu a zavádzame s ňou Raspberry Pi 4.
Ale nebol použitý žiadny vlastný obrázok na pozadí pre úvodnú obrazovku - prečo?
Čo spôsobuje toto správanie?
Po vyhľadaní "chyby" sa pozrieme na prioritnú premennú metavrstiev. Metavrstvy majú premennú pre prioritu definovať, v akom poradí sa meta-vrstva použije pri bitbakingu distribúcie Linuxu.
Premenná sa nastaví v súbore 'meta-interelectronix/conf/layer.conf':
BBFILE_PRIORITY_meta-interelectronix = "6"
V našom prípade bola priorita "meta-interelectronixu" stanovená na "6" a priorita "meta-raspberrypi" je stanovená na "9".Čím vyššia bola priorita, tým neskôr boli premenné súborov bbappend aplikované na bitbake. Keďže v "meta-raspberrypi" je tiež súbor "psplash_%.bbappend", premenné tohto súboru opäť prepisujú prepisy v našej vrstve "meta-interelectronix", nič sa nemení.
Nota
Zmeňte prioritu vlastnej metavrstvy na vysoké číslo, napr. 50, aby ste zmeny použili neskôr ako všetky prepísania cudzích metavrstiev.
Existuje jednoduchý príkaz na získanie poradia premennej vo všetkých meta-vrstvách:
bitbake-getvar -r recipe VARIABLE
V našom prípade príkaz bol:
bitbake-getvar -r psplash SPLASH_IMAGES
Výsledok po zmene priority vrstvy "meta-interelectronix" na "50" vyzerá 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 vrstiev môžete zobraziť aj nasledujúcim príkazom:
bitbake-layers show-layers
Licencia na autorské práva
Copyright © 2022 Interelectronix e.K.
Tento zdrojový kód Projectu je licencovaný pod licenciou GPL-3.0.