اون اولا که امبددلینوکس رو شروع کرده بودم ، هم با یوکتو کار کردم و هم با بیلدروت (اگه با این دوتا اصطلاح آشنا نیستید همینالان این مطلب رو رها کنید و اول اینجا رو بخونید) اما اصلاً از یوکتو خوشم و سادگی و سر راستی بیلدروت رو ترجیح میدادم، این که با دوتا دستور کارم انجام میشد و زمان بیلد شدن هم خیلی سریعتر یوکتو بود اونم روی لپتاپ ضعیف من .
حالا چند سالی میگذره از اون روزا اما ورق برگشته! حالا دیگه از یوکتو نمیتونم جدا بشم حالا میفهمم که اون پیچیدگی بیدلیل نبوده، اون موقع شاید مدت زیادی روی یه پروژه کار میکردم و بعد هم تموم میشد و با بیلدروت خیلی راحت بودم؛ اما الان که چند تا پروژه رو موازی باید پیش ببرم و هر کدومش مدام تغییرات میخواد، با بیلدروت اصلاً نمیتونم پیش برم و نابودم میکنه به همین دلیل و دلایل دیگه آموزش V3s رو با yocto پیش میبریم ، پس با سیسوگ همراه باشید تا به سراغ مهاجرت از بیلدروت به یوکتو بریم.
شاید برای شما مفید باشد: آموزش امبدد لینوکس از 0 تا 100
یوکتو چیست؟
همونطور که میدونید ساختن ایمیج لینوکسی برای سیستمهای امبدد بهصورت دستی کار پیچیده و به عبارتی اشتباه هست و برای این کار از بیلد سیستمها استفاده میکنیم که یوکتو هم یکی از اونها یا به عبارتی این روزها محبوبترین هست. شما با کمک یوکتو میتونید ایمیج لینوکسی خودتون رو بدون درنظرگرفتن معماری سخت افزارتون طراحی کنید و سپس اون رو روی سختافزارهای مختلف پیاده کنید. در ادامه کمی دقیقتر به بررسی یوکتو میپردازیم.
یوکتو از روش بیلد سیستم OpenEmbedded برای ساخت ایمیج لینوکس استفاده میکنه تصویر پایین نشون دهنده ساختار این بیلد سیستم هست (میتونید مقایسش کنید با ساختار buildroot در این مطلب)
بیلد پکیجهای نرمافزاری
پکیجهای نرمافزاری بخش اصلی هر سیستمعاملی هستند؛ چون در نهایت ما از اونها استفاده میکنیم، همونطور که مشاهده میکنید در یوکتو مراحل زیر برای آمادهسازی یک پکیج نرمافزاری انجام میشه.
- دریافت (fetch) : دانلود سورس کد (از سیستم ورژن کنترل مثل گیت یا یه آدرس اینترنتی یا یه سرور ftp یا… )
- اکسترکت (extract) : اگر بهصورت فایل فشردهسازی شده باشه از حالت فشرده خارج میشه.
- پچ (patch) : به طور مثال ما سورس درایوری رو دانلود میکنیم که برای اجرا روی سختافزار ما نیاز به تغییراتی داره که با اعمال patch این کار انجام میشه و مناسب اجرا روی سختافزار ما میشه.
- کانفیگ (configure) : معمولاً پکیجهای مختلف تنظیماتی دارند تا مثلاً یکسری قابلیتها رو به اونها اضافه کنیم یا حذف کنیم یا مثلاً به صورت قبببل debug کامپایل کنیم و …
- بیلد (build) : همون کامپایل کردن خودمون که حالا با کمک make , cmake یا… انجام میشه.
- نصب (install) : شامل انتقال فایلها به جایی که باید باشند میشه، مثلاً داکیومنتها رو به پوشه doc میبره ، کانفیگها رو به etc ، فایلهای اجرایی رو به bin و …
- بستهبندی (package) : فایلهای هر پکیج بعد کامپایل بهصورت یک فایل قابلنصب rpm در میاد و میتونید روی هر سیستمی با معماری مشابه اجراش کنید.
فایل های Metadata
در یوکتو فایل های متادیتا به دو دسته اصلی کانفیگ ها و recipe ها تقسیم میشوند
فایل های Configuration
فایلهای کانفیگ تنظیمات لازم بیلد سیستم رو بهصورت ساده متغیری ذخیره میکنند، در یوکتو چندین نوع فایل کانفیگ داریم که در ادامه اونها رو بررسی میکنیم
BitBake Master Configuration File (bitbake.conf)
این فایل اصلی تنظیمات bitbake هست ، در واقع bitbake یک build engine هست که کارش زمان بندی تسکها و اجرای اونها هاست این تسکها شامل خواندن کانفیگها، شروع کامپایل پکیجها به ترتیب اولویت و خلاصه هر کاری که باید انجام بشه هست
Layer Configuration (layer.conf)
در یوکتو از layer برای مدیریت metadata ها استفاده میشه که باعث افزایش انعطاف میشه، به طور مثال من تا الان داشتم برای v3s با یوکتو کد مینوشتم حالا میخوام همون برنامه رو بر روی allwinner h3 اجرا کنم ، برای این کار کافیه که layer مربوط به h3 که شامل دیوایس تریها کانفیگهای یوبوت و کرنل و … هست رو به یوکتو خودم اضافه کنم و ایمیج خودم رو برای h3 بسازم فایل layer.conf هم تنظیمات مربوط به هر layer رو در خودش داره.
Build Environment Layer Configuration (bblayers.conf)
ما برای هر پروژه یک فولدر مخصوص داریم که کانفیگهای مربوط به اون پروژه مثلاً سختافزار مورداستفاده، معماری، نسخه کرنل و … روتوش مشخص میکنیم، علاوه بر اول فایلی با نام bblayers.conf داریم که لیست لایههایی که در پروژمون میخوایم استفاده کنیم رو باید به اون اضافه کنیم.
Build Environment Configuration (local.conf)
یکی از فایلهای دیگه که توی فولدر پروژه هست همین فایل local.conf هست که همون سختافزار و معماری و … رو داخلش مشخص میکنیم
Distribution Configuration (<distribution-name>.conf)
ما میتونیم برای خودمون یک توزیع یا همون Distribution داشته باشیم یا تعریف کنیم که شامل پکیجهایی که توی اون باید باشه و… هست که در فایل distribution-name.conf مشخص میشه که “distribution-name” نام توزیع ما هست
Machine Configuration (<machine-name>.conf)
همچنین ما میتونیم ماشینهای مختلفی تعریف کنیم که در اصل همون بردی هست که میخوایم برنامه روش اجرا بشه که یک چیپ مشخص روش هست با یک دیوایس تری مشخص
حالا مثلاً با این روش ما میتونیم 3 تا توزیع مختلف برای پروژههای مختلف درست کنیم و 3 تا ماشین مختلف. الان میتونیم هر پروژه رو بهراحتی روی هر کدوم از این 3 سختافزار اجرا کنیم.
فایل های Recipe
مراحلی که برای آمادهسازی هر پکیج باید طی بشه رو مشخص میکنه مثلاً شامل چند تا متغیر هست که با تغییر اونها میتونیم بخشهایی از پکیج رو فعال یا غیرفعال کنیم یا تنظیمات اون پکیج رو مشخص کنیم، مثلاً ما یک recipe داریم که کارش نشون دادن لوگو هنگام بوت شدن سیستم هست با تغییر عکسی که داخل اون recipe هست ،میتونیم لوگو خودمون رو جایگزین کنیم. فایلهای recpipe دارای فرمت .bb هستند.
نسخههای یوکتو
یکی از مباحث مهم دیگه بحث نسخههای یوکتو هست، یوکتو هم مثل هر پروژه اوپن یا غیر اوپن سورسی هر چند وقت یکبار که اینجا هر 6 ماه یکبار هست یه نسخه میده بیرون، recipeها و کانفیگهایی هم که میخواید استفاده کنید باید دقت کنید که مناسب نسخه مورداستفاده شما باشه در ادامه میتونید لیستی از این نسخهها و تاریخ انقضاشون رو مشاهده کنید
معمولاً ریپازیتوریهایی که یک meta layer برای تراشههای مختلف آماده کردند اون رو توی برنچ های مختلف برای چند release قرار میدند که شما با انتخاب اونها میتونید نسخهای که به کارتون میاد رو دانلود کنید.
سخن آخر
قبلاً گفته بودم که یوکتو فضای خیلی بیشتری رو اشغال میکنه برای ساخت ایمیج نسبت به بیلدروت اما به نظرم این حرف زمانی درسته که مثلاً شما یک یا نهایتاً دو پروژه رو بخواهید انجام بدید اگر تعداد بیشتر شد یوکتو به نسبت فضای کمتری رو اشغال میکنه، چرا که در برای بیلد روت برای هر پروژه باید کل بیلد سیستم رو کپی پیست کنید و قابلیت پروژه بندی نداره مثل یوکتو.
توضیحات تئوری ما همینها به پایان میرسه و از قسمت بعد بهصورت عملی و با کمک این ریپازیتوری ادامه آموزشمون و ساخت ایمیج برای برد sinux v3 رو پیش میبریم
تا اون موقع مطالعه فراموش نشه، پیشنهاد میکنم حتماً کتاب Embedded Linux Systems with the Yocto Project رو تا فصل 4 بررسی کنید که مطالب فوقالعادهای داره
در این بخش میتونید به همه قسمتهای سری آموزش کار با تراشه V3S دسترسی پیدا کنید:
- کار با تراشه V3S – قسمت اول – سخت افزار
- کار با تراشه F1C100S – قسمت دوم – مقدمه ای بر buildroot
با سلام
خیلی عالی
منتظر ادامه این مطلب هستیم.
بله حتما 🙏🙏
سلام
برد برد sinux f1 را از فروشگاه خریدم. آیا قابلیت راه اندازی با yocto را دارد؟
سلام
خیر. باید توی اینترنت فایل هاش باشه که بشه راه اندازی کرد. منکه چیزی ندیدم