
آیا تا به حال اتفاق افتاده که در متالایه سفارشی خود متغیرهای دستورالعمل را لغو کنید و هیچ اتفاقی نیفتد؟
به خود شک نکنید و به اولویت متالایههای استفادهشده، نگاهی بیندازید.
مثال
میخواهیم یک توزیع Yocto Linux برای Raspberry Pi 4 بسازیم و تصویر پسزمینه دستور psplash را تغییر دهیم. برای انجام این کار، یک پوشه 'psplash' در متالایه سفارشی خود 'meta-interelectronix' ایجاد کرده و فایل 'psplash_%.bbappend' را اضافه میکنیم تا متغیرهای 'SPLASH_IMAGES' را لغو کنیم.
SPLASH_IMAGES:rpi = "file://psplash-ixlogo-white-img.h;outsuffix=raspberrypi"
پس از افزودن «meta-interelectronix» به «bblayers.conf»، توزیع Linux را بیتبیک میکنیم، آن را روی کارت SD فلش کرده و Raspberry Pi 4 را با آن بوت میکنیم.
اما هیچ تصویر پسزمینه سفارشی برای صفحه اسپلش استفاده نشده است - چرا؟
علت این رفتار چیست؟
پس از جستجوی "خطا"، نگاهی به متغیر اولویت متالایهها خواهیم داشت. متالایهها دارای یک متغیر برای اولویت هستند که مشخص میکند متالایه در هنگام بیتبیک کردن توزیع Linux، در کدام رتبه استفاده میشود.
این متغیر در فایل 'meta-interelectronix/conf/layer.conf' تنظیم میشود:
BBFILE_PRIORITY_meta-interelectronix = "6"
در مورد ما، اولویت "meta-interelectronix" روی "6" و اولویت "meta-raspberrypi" روی "9" تنظیم شده است.
هرچه اولویت بیشتر باشد، متغیرهای فایلهای bbappend برای بیتبیک دیرتر اعمال میشوند. مشابه "meta-raspberrypi"، یک فایل "psplash_%.bbappend" نیز وجود دارد، متغیرهای این فایل لغوهای انجام شده در لایه "meta-interelectronix" ما را مجدداً لغو میکنند و در نتیجه هیچ چیز تغییر نمیکند.
توجه
اولویت متالایه سفارشی خود را به یک عدد زیاد تغییر دهید، مثلاً 50، تا تغییرات خود را بعداً و زمانی که تمام لغوهای متالایههای خارجی انجام شد، اعمال کنید.
چگونه ردهبندی متغیرها را آسان کنیم؟
یک دستور آسان برای بهدستآوردن ردهبندی یک متغیر در تمام متالایهها وجود دارد:
bitbake-getvar -r recipe VARIABLE
در مورد ما، دستور این بود:
bitbake-getvar -r psplash SPLASH_IMAGES
نتیجه پس از تغییر اولویت لایه 'meta-interelectronix' به "50" به صورت زیر است:
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"
همچنین میتوانید با دستور زیر اولویت لایههای استفادهشده را نشان دهید:
bitbake-layers show-layers
مجوز کپی رایت
کپیرایت © 2022 Interelectronix e.K.این کد منبع پروژه دارای مجوز GPL-3.0 است.