توصیه شده, امبدد لینوکس, دوره آموزش امبدد لینوکس, مقاله های سیسوگ

امبدد لینوکس – قسمت هشتم – Toolchain یا زنجیره‌ای از ابزارهای لازم برای ساختن همه چیز (بخش چهارم)

امبدد لینوکس – قسمت هشتم

با قسمت هشتم از دوره ورود به دنیای امبدد لینوکس که دوره مقدماتی آموزش امبدد لینوکس  می باشد همراه ما باشید.

(فصل دوم – بخش چهارم)

سلام، توی قسمت قبل رابطه بین تولچین و نوع پردازنده رو بررسی کردیم. توی این جلسه می‌خواهیم کتابخانه‌های C و ارتباط برنامه‌های لینوکسی با کرنل رو بررسی کنیم.

 

در قسمت‌های قبلی آموزش، مسیر حرکت و فصل‌های پیش‌رو، بسیاری از مفاهیم مورد نیاز و سؤال‌ها و ابهامات شما در این دوره پاسخ داده شده است.
پس اگر اولین بار است که این آموزش را شروع می‌کنید، با توجه به سلسله مراتب پیش بینی شده برای آموزش‌ها، بهتر است از جلسه اول شروع کنید!
جلسه اول آموزش، ورود به دنیای امبدد لینوکس
همه آموزش‌های امبدد لینوکس

 

کتاب‌خانه C و کرنل

رابط برنامه‌نویسی با سیستم عامل‌های یونیکسی با زبان C تعریف شده، که الآن با استاندارد POSIX تعریف می‌شه. کتاب‌خانه C پیاده سازی این رابط و در حقیقت شاهراه ارتباط با کرنل برای برنامه‌های لینوکسی هست. حتی اگر برنامه شما با زبان دیگری نوشته شده باشد باز هم در زمان اجرا باید از این شاهراه عبور کند.

کتابخانه C و کرنل

چندین کتاب‌خانه C برای ارتباط با کرنل داریم الآن، که در زمان کتاب کریم اکثراً نبودن و یه سری چیزهای دیگه بوده که ما کاری به کارشون نداریم چون منسوخ شدن. الآن کریس میگه اینا رو داریم:
glibc: کتاب‌خانه استاندارد گنو هست و از سایتش قابل دسترس هست. از نظر سایز خیلی بزرگه ولی منطبق‌ترین کتابخانه با POSIX API هست.
musl libc: این جدید هست و از اینجا قابل دسترسه. با وجود این‌که جدیده توجه بسیاری رو به خودش جلب کرده نه چون جذابه چون هم سایزش کمه و هم خیلی منطبق با استاندارد هست و جایگزین خوبی هست واسه glibc مخصوصاً اگه مشکلات حافظه داشته باشین.
uClibc-ng: در ابتدا برای میکروکنترلرها یا بهتر بگیم پردازنده‌هایی که Memory Management Unit (MMU) ندارن و از uCLinux استفاده می‌کنن بود ولی امروزه برای لینوکس کامل هم استفاده می‌شه. کریس زیاد باش حال نمی‌کنه ولی پر کاربرد هست هنوزم! از اینجا می‌تونین بهش دسترسی داشته باشین.

 

حالا کی از کدوم استفاده کنیم؟

همه این کتاب‌خانه‌های C برای ارتباط با کرنل هستند، اما اینکه از کدوم کتاب‌خونه کی و کجا استفاده کنیم، کریس یه حساب کتاب سر انگشتی داده که تو عکس زیر می‌بینید و توی توضیحات گفته که جاهایی که محدودیت حافظه دارین musl libc بهتر از uClibc-ng هست.

رابطه بین لایبری های مختلف C و کرنل لینوکس

 

نحوه نام‌گذاری تولچین گنو (GNU Toolchain)

این یک قانون هست، ولی قانون نیست! خیلی جاها ممکنه رعایت نشه ولی با دونستنش می‌تونید منظور سازنده تولچین رو بفهمید.
نام گذاری باید این شکلی باشه:

CPU-Vendor-Kernel-OperatingSystem

CPU: معماری پردازنده، اگه پردازنده فقط Little Endian باشه ممکنه یه el داشته باشه و اگه فقط Big Endian ممکنه eb داشته باشه. مثلا armeb.

Vendor: کسی یا جایی که تولچین رو ساخته مثلا ‌Buildroot یا Poky.

Kernel: کرنل واسه ما همیشه لینوکس هست که یه جاهایی هم واسه اختصار حذف می‌شه. اگه هم تولچین واسه برمتال یا همون Bare Metal باشه معمولاً none هست. برمتال هم یعنی همون کاری که با میکروکنترلر می‌کنیم و بدون سیستم عامل و مستقیم واسه پردازنده کد می‌نویسم.

OperatingSystem: اسم کتابخانه C که معمولاً ABI هم بهش میچسبه مثلاً gnueabi یا musleabihf.
مثلاً armv8l-linux-gnueabihf توی سایت لینارو یعنی تولچینی که واسه معماری armv8 هست از نوع Little Endian برای لینوکس و با کتابخانه C گنو و EABIHF.

تولچین آماده استفاده کنیم یا خودمون بسازیم؟

اگه واسه پردازنده‌ای که دارید استفاده می‌کنید شرکت سازنده پردزانده و یا شرکت طراح معماری پردازنده یا شرکت سازنده برد، تولچینی ارائه داده باشه بهتره از اون استفاده کنید. در کل به جز شرایط خاص هیچ وقت نرید سراغ ساختن تولچین چون کار تخصصی هست.
خب این سایت‌ها چیا هستن؟ بهترینش واسه پردازنده‌های Cortex-A سایت Linaro هست. واسه بقیه پردازنده‌ها هم جوینده یابنده ست!

 

تمرین

با توجه به اینکه دو تا برد رو انتخاب کردیم برای کار کردن باهاشون، با توجه به ویژگی‌های ذکر شده در بخش |رابطه بین تولچین (Toolchain) و پردازنده| برای جفتشون چهارتا ویژگی رو مشخص کنید و بعد تولچین آماده رو واسه جفتشون پیدا کنید.

 

پایان بخش چهارم از فصل دوم.

قسمت بعد (قسمت نهم – بخش پنجم این فصل) را از اینجا میتونید مطالعه کنید، اما بهتره قبلش یه سری هم به نظرات این پایین بندازید، نظرات رو بخونید و اگر شما هم نظری دارید، مشارکت کنید!

همه آموزش های امبدد لینوکس

author-avatar

درباره Rich_Dad (آنی روت)

طراحی، بهینه سازی و تولید محصولات الکترونیکی، درحوزه های تجاری،صنعتی و تجهیزات پزشکی، مجری سیستم های امبدد لینوکس *( مهندسی-بازرگانی آنی روت https://aniroot.com )

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

9 دیدگاه در “امبدد لینوکس – قسمت هشتم – Toolchain یا زنجیره‌ای از ابزارهای لازم برای ساختن همه چیز (بخش چهارم)

  1. Avatar for حسن حسن گفت:

    سلام برای bare metal چرا باید toolchain نوشت ؟
    برای bootloader هست مثلا
    چون توی arm stm32 مثلا لایبراری های hal و ll هست یا حتی خود arduino که گویا به کد بوتلودر اشون ربط داره

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      تولچین نباید نوشت ولی لازمه که تولچین برای اون پردازنده بیلد بشه
      البته ما خیلی وقت ها از تولچین های بیلد شده استفاده می کنیم

  2. Avatar for منصور منصور گفت:

    برای Raspberry PI 3 چهار ویژگی به صورت زیر هست :

    armv7l-broadcom-linux-gnueabihf

    و اینم لینک گیت هاب برای دانلود تولچین:
    https://github.com/raspberrypi/tools

  3. Avatar for صاحبی صاحبی گفت:

    بر اساس اطلاعات مستند

    F1C100 معماری ARM هست با طراحی Little Endian، ممیز شناور رو نتونستم تشخیص بدم داره یا نه (اما فکر کنم جایی خوندم که نداره، شایدم داشته باشه، زیاد سر ننداختم، فعلا در حال مطالعه سریع و چند باره این فصل هستم تا مقداری موضوعاتش رو بیشتر درک کنم)

    1. Avatar photo Rich_Dad گفت:

      سلام بر شما و دنبال کردن مقاله ها
      این پردازنده ممیز شناور ندارد

  4. Avatar for احسان احسان گفت:

    سلام
    منتظر قسمت بعدی هستیم
    ممنون از آموزش با ارزشی که گذاشتید
    امیدوارم زودتر قسمت های بعدی هم ارسال بشه

    1. Avatar photo Rich_Dad گفت:

      سلام بر احسان عزیز و پیگیری که دارید

  5. Avatar for یحیی نتاج یحیی نتاج گفت:

    خیلی عالی ممنونم.

    1. Avatar photo Rich_Dad گفت:

      سلام و تشکر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *