هنگام کار با پروژه Yocto، یکی از ابزارهای اساسی که با آن مواجه خواهید شد BitBake است. BitBake موتور ساختی است که مسئول پردازش و اجرای دستور العمل های پیچیده build برای ایجاد توزیع های لینوکس سفارشی برای سیستم های Embedded شده است. چه تازه کار باشید و چه به دنبال درک عمیق تر باشید، تسلط بر BitBake برای توسعه کارآمد لینوکس embedded ضروری است. در ادامه به BitBake چیست می پردازیم.
در این پست، ما بررسی خواهیم کرد:
- BitBake چیست و نقش آن در پروژه Yocto چیست؟
- معماری و اجزای BitBake.
- BitBake چگونه وظایف را اجرا کرده و دستورالعمل های ساخت را پردازش می کند؟
- مثال های عملی از استفاده از BitBake برای ساخت image های سفارشی.
BitBake چیست؟
BitBake یک موتور اجرای وظایف است که برای پردازش دستورالعمل های ساخت سیستم های لینوکس Embedded طراحی شده است. این ابزار مسئول دریافت کد منبع، کامپایل، بسته بندی و مونتاژ image نهایی است. BitBake که از GNU Make الهام گرفته شده است، قابلیت های ردیابی وابستگی و اجرای وظایف قدرتمندی را ارائه می دهد که برای کامپایل متقابل و توسعه Embedded بهینه شده اند.
BitBake در ابتدا به عنوان بخشی از پروژه OpenEmbedded توسعه یافت، اما اکنون ستون فقرات پروژه Yocto است و نقش حیاتی در سیستم ساخت آن دارد.
ویژگی های کلیدی BitBake چیست؟
- اجرای موازی: BitBake می تواند چندین وظیفه را به صورت هم زمان اجرا کند و زمان ساخت را بهینه کند.
- مدیریت وابستگی ها:تضمین می کند که وظایف به ترتیب صحیح اجرا شوند.
- سفارشی سازی:توسعه دهندگان می توانند دستورالعمل های موجود را تغییر دهند یا دستورالعمل های جدیدی برای سفارشی سازی image های لینوکس خود ایجاد کنند.
- بازتولیدپذیری:با کنترل وابستگی ها و پیکربندی ها، از ایجاد build های یکسان در محیط های مختلف اطمینان حاصل می کند.
درک معماری BitBake
BitBake یک رویکرد ساختاریافته برای پردازش و اجرای دستورالعمل های ساخت دنبال می کند. اجزای کلیدی معماری آن عبارتند از:
1. دستورالعمل ها( فایل های .bb)
دستورالعمل ها(Recipe ها)هسته BitBake هستند. این فایل ها شامل دستورالعمل های ساخت مانند دریافت کد منبع، اعمال وصله ها، پیکربندی، کامپایل و نصب نرم افزار هستند. یک دستورالعمل ساده BitBake ممکن است به این شکل باشد:
DESCRIPTION = "simple example Hello World"
LICENSE = "MIT"
SRC_URI = "file://hello.c"
do_compile() {
${CC} hello.c -o hello
}
do_install() {
install -d ${D}${bindir}
install -m 0755 hello ${D}${bindir}/hello
}
2. کلاس ها (فایل های .bbclass)
کلاس ها منطق ساخت قابل استفاده مجدد را ارائه می دهند. آن ها رفتارهای مشترک را در چندین دستورالعمل تعریف می کنند. برای مثال، base.bbclass توابع ساخت اولیه را ارائه می دهد، در حالی که kernel.bbclass کامپایل کرنل سیستم عامل را ساده می کند.
3. فایل های پیکربندی (.conf Files) در BitBake چیست؟
فایل های پیکربندی تنظیمات ساخت کلی مانند معماری هدف، فرمت بسته بندی و فلگ های کامپایل را تعریف می کنند. فایل های پیکربندی مهم شامل:
- local.conf : مشخص کننده پیکربندی ماشین و تنظیمات ساخت.
- bblayers.conf : لایه های موجود در ساخت را تعریف می کند.
مثال از local.conf:
MACHINE = "qemuarm"
PACKAGE_CLASSES = "package_rpm"
BB_NUMBER_THREADS = "4"
4. لایه ها (meta- Layers) در BitBake چیست؟
لایه ها دستورات و پیکربندی ها را سازماندهی می کنند و امکان ماژولار بودن را فراهم می کنند. برخی از لایه های رایج:
- meta-openembedded:بسته های نرم افزاری متن باز اضافی را فراهم می کند.
- meta-raspberrypi :امکان ساخت Yocto برای Raspberry Pi را فراهم می کند.
فایل bblayers.conf ممکن است شامل موارد زیر باشد:
BBLAYERS ?= " \
/home/user/yocto/meta \
/home/user/yocto/meta-poky \
/home/user/yocto/meta-openembedded \
"
5. وظایف و گردش کار
BitBake یک دستورالعمل را به وظایف کوچکتر تقسیم می کند مانند:
- do_fetch : دریافت کد منبع.
- do_unpack :استخراج فایل های منبع.
- do_patch :اعمال وصله ها.
- do_configure :پیکربندی نرم افزار قبل از کامپایل.
- do_compile :کامپایل کد منبع.
- do_install : نصب نرم افزار در ریشه ساخت.
- do_package :بسته بندی نرم افزار در قالب توزیع پذیر.
نحوه اجرای ساخت توسط BitBake چیست؟
هنگامی که یک کاربر BitBake را اجرا می کند، یک توالی ساختاریافته برای پردازش و اجرای ساخت دنبال می شود:
اجرای دستورات BitBake
برای ساخت یک تصویر کامل:
$ bitbake core-image-minimal
برای ساخت یک بسته خاص:
$ bitbake busybox
برای پاک کردن ساخت یک بسته:
$ bitbake -c clean busybox
مثال عملی: نوشتن و اجرای یک دستورالعمل سفارشی
بیایید یک دستورالعمل BitBake برای کامپایل و نصب یک برنامه C ساده ایجاد کنیم.
ایجاد فایل دستورالعمل (hello.bb):
DESCRIPTION = "برنامه Hello World"
LICENSE = "MIT"
SRC_URI = "file://hello.c"
S = "${WORKDIR}"
do_compile() {
${CC} hello.c -o hello
}
do_install() {
install -d ${D}${bindir}
install -m 0755 hello ${D}${bindir}/hello
}
افزودن کد منبع (hello.c)
#include <stdio.h>
int main() {
printf("Hello, Yocto!\n");
return0;
}
ساخت دستورالعمل
$ bitbake hello
BitBake موتور اصلی پروژه Yocto است که فرآیند پیچیده ساخت توزیع های لینوکس Embedded را مدیریت می کند. با درک معماری، اجرای وظایف و استفاده عملی، توسعه دهندگان می توانند پروژه های Yocto خود را سفارشی و بهینه کنند.