
Czy zdarza się, że nadpisujesz zmienne receptury w swojej niestandardowej meta-warstwie i nic się nie dzieje?
Nie trać wiary w siebie i przyjrzyj się priorytetowi stosowanych meta-warstw.
Przykład
Chcemy zbudować Yocto Linux distro dla Raspberry Pi 4 i zmienić obraz tła psplash receptury. W tym celu tworzymy folder „psplash” w naszej niestandardowej meta-warstwie „meta-interelectronix” i dodajemy plik „psplash_% .bbappend”, aby zastąpić zmienne „SPLASH_IMAGES”.
SPLASH_IMAGES:rpi = "file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"
Po dodaniu „meta-interelectronix” do „bblayers.conf” możemy stworzyć za pomocą bitbake distro Linuksa, zapisać go jako dysk flash na karcie SD i uruchomić Raspberry Pi 4 z nim.
Nie pojawił się obraz tła dla ekranu powitalnego – dlaczego?
Co powoduje takie zachowanie?
Po wyszukaniu „błędu” przyjrzeliśmy się zmiennej priorytetowej meta-warstwy. Meta-warstwy mają zmienną dla priorytetu, aby określić, w której randze meta-warstwa jest używana podczas bitbakingu dystrybucji Linuksa.
Zmienna jest ustawiona w pliku „meta-interelectronix/conf/layer.conf”:
BBFILE_PRIORITY_meta-interelectronix = "6"
W naszym przypadku priorytet „meta-interelectronix” został ustawiony na „6”, a priorytet „meta-raspberrypi” na „9”.
Im wyższy priorytet, tym późniejsze były zmienne plików bbappend zastosowane do bitbake. Podobnie jak w pliku „meta-raspberrypi” jest również plikiem „psplash_% .bbappend”, zmienne tego pliku ponownie zastępują nadpisania w warstwie „meta-interelectronix”, nic się nie zmienia.
Uwaga
Zmień priorytet niestandardowej meta-warstwy na wysoką liczbę, np. 50, aby zastosować zmiany później jako wszystkie nadpisania zewnętrznych meta-warstw.
Jak można łatwo uzyskać ranking zmiennych?
Istnieje łatwe polecenie, aby uzyskać ranking zmiennej nad wszystkimi meta-warstwami:
bitbake-getvar -r recipe VARIABLE
W naszym przypadku poleceniem było:
bitbake-getvar -r psplash SPLASH_IMAGES
Wynik po zmianie priorytetu warstwy „meta-interelectronix” na „50” wygląda następująco:
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"
Priorytet używanych warstw można również wyświetlić za pomocą następującego polecenia:
bitbake-layers show-layers
Licencja na prawa autorskie
Copyright © 2022 Interelectronix e.K.
Ten kod źródłowy projektu jest udostępniany na licencji **GPL-3.0 * *.