
Oppretter du noen gang en overstyring av oppskriftsvariabler i det egendefinerte metalaget ditt, hvorpå ingenting skjer?
Ikke tvil på deg selv og ta en titt på prioriteringen til de anvendte metalagene.
Eksempel
Vi ønsker å bygge en Yocto Linux-distro for Raspberry Pi 4 og endre psplash-oppskriftens bakgrunnsbilde. For å gjøre dette, oppretter vi en mappe «psplash» i vårt eget egendefinerte metalag «meta-interelectronix» og legger til filen «psplash_%.bbappend» for å overstyre variablene til «SPLASH_IMAGES».
SPLASH_IMAGES:rpi = "file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"
Etter å ha lagt til «meta-interelectronix» i «bblayers.conf», bitbaker vi Linux-distroen, blinker den til et SD-kort og booter Raspberry Pi 4 med denne.
Men det ble ikke brukt noe tilpasset bakgrunnsbilde for splash-skjermen – hvorfor det?
Hva forårsaker denne atferden?
Etter å ha søkt etter «feilen» tar vi en titt på metalagenes prioritetsvariabel. Metalag har en variabel for prioriteten for å definere i hvilken rang metalaget brukes ved bitbaking av Linux-distroen.
Variabelen angis i filen «meta-interelectronix/conf/layer.conf»:
BBFILE_PRIORITY_meta-interelectronix = "6"
I vårt tilfelle ble prioriteten til «meta-interelectronix» angitt til «6» og prioriteten til «meta-raspberrypi» er angitt til «9».
Jo høyere prioritet, desto senere blir variablene i bbappend-filer som ble brukt på bitbake. Siden det i «meta-raspberrypi» også er en «psplash_%.bbappend»-fil, overstyrer variablene i denne filen overstyringene i «meta-interelectronix»-laget igjen, og ingenting endres.
Merknad
Endre det egendefinerte metalagets prioritet til et høyt tall, f.eks. 50, for å bruke endringene senere som alle overstyringer av fremmede metalag.
Hvordan oppnår man enkel rangering av variabler?
Det fins en enkel kommando for å få tak i en variabels rangering over alle metalag:
bitbake-getvar -r recipe VARIABLE
I vårt tilfelle var kommandoen:
bitbake-getvar -r psplash SPLASH_IMAGES
Resultatet etter å ha endret «meta-interelectronix»-lagets prioritet til «50» ser slik ut:
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"
Du kan også vise prioriteten til brukte lag med følgende kommando:
bitbake-layers show-layers
Opphavsrettslisens
Copyright © 2022 Interelectronix e.K.
Denne Project-kildekoden er lisensiert under GPL-3.0 -lisensen.