
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.
### Ako ľahko získať poradie premenných?
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.