اگر در حال کار با لینوکس embedded هستید، احتمالاً با پروژه Yocto برخورد کرده اید. Yocto یک پروژه متن باز است که ابزارهایی را برای ایجاد توزیع های سفارشی لینوکس متناسب با سخت افزار و نیازهای برنامه های خاص ارائه می دهد. یکی از مفاهیم کلیدی در Yocto "لایه ها" هستند که به سازماندهی و ساختاردهی سیستم build کمک می کنند. در این پست وبلاگ، توضیح خواهیم داد که لایه های Yocto چه هستند، چرا مهم هستند و چگونه می توانید از آن ها به طور مؤثر استفاده کنید.
لایه های Yocto چه هستند؟
لایه های Yocto مجموعه ای ساختاریافته از متاداده ها هستند که به مدیریت و سفارشی سازی فرایند build توزیع لینوکس کمک می کنند. متاداده در Yocto شامل تنظیمات، دستورالعمل های (recipes)build و کلاس هایی است که مشخص می کنند چگونه نرم افزار کامپایل و بسته بندی شود. لایه ها ماژولار بودن را فراهم می کنند و این باعث می شود که گسترش، تغییر و نگهداری سیستم build Yocto آسان تر شود.
هر لایه می تواند شامل انواع مختلفی از فایل ها باشد، مانند:
- دستورالعمل ها(فایل های .bb):نحوه ساخت بسته های تکی را تعریف می کنند.
- فایل های پیکربندی( فایل های .conf):تنظیمات مربوط به ساخت را کنترل می کنند.
- فایل های کلاس(فایل های .bbclass):شامل توابع و ماکروهای قابل استفاده مجدد هستند.
- فایل های patch:تغییراتی را در کد منبع اعمال می کنند.
چرا لایه های Yocto مهم هستند؟
لایه ها به توسعه دهندگان این امکان را می دهند که پیکربندی های build خود را سازماندهی کنند. به جای قرار دادن همه سفارشی سازی ها در یک پیکربندی build، لایه ها یک رویکرد ساختاریافته را از طریق دسته بندی عملکردها ارائه می دهند، مانند:
- لایه های اصلی (Core Layers):شامل اجزای اساسی سیستم build پروژه Yocto هستند.
- لایه های BSP (پکیج پشتیبانی از سخت افزار): پشتیبانی سخت افزاری برای پلتفرم های مختلف را فراهم می کنند.
- لایه های نرم افزار: شامل بسته های اضافی، کتابخانه ها یا برنامه ها هستند.
- لایه های توزیع (Distro Layers):تنظیمات خاص توزیع را تعریف می کنند.
- لایه های سفارشی: توسط توسعه دهندگان برای تغییرات خاص پروژه ایجاد می شوند.
این رویکرد ماژولار به افزایش قابلیت استفاده مجدد کمک کرده و مدیریت پروژه های مختلف را که دارای اجزای مشترک هستند، آسان تر می کند. با نگه داشتن لایه ها به صورت مجزا، تیم ها می توانند به طور مستقل بر روی جنبه های مختلف پروژه کار کنند.
نحوه استفاده از لایه های Yocto
تنظیم یک محیط Yocto
قبل از کار با لایه های Yocto، مطمئن شوید که یک محیط Yocto راه اندازی کرده اید. روش رایج برای شروع با Yocto، کلون کردن مخزن Poky است:
$ git clone git://git.yoctoproject.org/poky.git
$ cd poky
پس از تنظیم محیط، آن را مقداردهی اولیه کنید:
$ source oe-init-build-env
این دستور دایرکتوری ساخت را تنظیم می کند، جایی که پیکربندی ها و لایه های شما ذخیره می شوند.
بررسی لایه های پیش فرض
هنگامی که یک محیط ساخت Yocto را مقداردهی اولیه می کنید، چندین لایه پیش فرض را شامل می شود، مانند:
- Meta: شامل متاداده اصلی Yocto است.
- meta-poky: شامل پیکربندی های توزیع Poky است.
- meta-yocto-bsp: شامل بسته های پشتیبانی سخت افزاری (BSP) برای پلتفرم های متداول است.
افزودن یک لایه
برای اضافه کردن یک لایه، ابتدا باید آن را کلون یا ایجاد کنید. به عنوان مثال، برای اضافه کردن لایه meta-openembedded می توانید از این دستور استفاده کنید:
$ git clone git://git.openembedded.org/meta-openembedded
سپس این لایه را در فایل bblayers.conf ثبت کنید:
BBLAYERS += "${TOPDIR}/../meta-openembedded/meta-oe"
اضافه کردن لایه Qt به پروژه Yocto
اگر می خواهید Qt را به Yocto اضافه کنید، باید لایه meta-qt5 را اضافه کنید. Qt یک فریمورک محبوب برای توسعه برنامه های گرافیکی است.
1. کلون کردن لایه meta-qt5
$ git clone
git://github.com/meta-qt5/meta-qt5.git
2. افزودن لایه Qt به bblayers.conf
BBLAYERS += "${TOPDIR}/../meta-qt5"
فعال کردن Qt در دستورالعمل ایمیج
IMAGE_INSTALL += "qtbase qtdeclarative qtquickcontrols2"
ساخت ایمیج Qt
$ bitbake my-image
ایجاد یک لایه سفارشی
اگر نیاز به ایجاد یک لایه جدید برای پروژه خود دارید، می توانید از دستور زیر استفاده کنید:
$ bitbake-layers
create-layer ../meta-mycustomlayer
نوشتن دستورالعمل در یک لایه
یک لایه معمولاً شامل دستورالعمل هایی است که مشخص می کنند بسته ها چگونه ساخته شوند. نمونه ای از یک دستورالعمل (myapp_1.0.bb):
SUMMARY = "My custom application"
LICENSE = "MIT"
SRC_URI = "file://myapp.c"
do_compile() {
${CC}${CFLAGS}${LDFLAGS} -o myapp myapp.c
}
do_install() {
install -d ${D}${bindir}
install -m 0755 myapp ${D}${bindir}
}
بهترین شیوه ها برای مدیریت لایه های Yocto
- لایه ها را ماژولار نگه دارید
- از نام گذاری استاندارد Yocto پیروی کنید
- از layer.conf به درستی استفاده کنید
- از کنترل نسخه (Git) استفاده کنید
- لایه ها را جداگانه تست کنید
- مستندات خوبی برای لایه های خود تهیه کنید
- لایه ها را به روز نگه دارید
اشکال زدایی مشکلات لایه ها
- از دستور bitbake-layers show-layers برای بررسی اضافه شدن لایه ها استفاده کنید.
- خطاهای نحوی در bblayers.conf و local.conf را بررسی کنید.
- از bitbake -e برای بررسی متغیرهای محیطی استفاده کنید.
- لاگ های build را در tmp/log بررسی کنید.
- اطمینان حاصل کنید که وابستگی های بین لایه ها به درستی تنظیم شده اند.
لایه های Yocto راهی ساختاریافته برای مدیریت پیچیدگی های ساخت لینوکس embedded ارائه می دهند. با یادگیری نحوه اضافه کردن، ایجاد و نگهداری لایه ها، می توان فرایند سفارشی سازی را بهبود بخشید و مدیریت ساخت را آسان تر کرد.