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

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

امبدد لینوکس – قسمت هشتم – Toolchain یا زنجیره‌ای از ابزارهای لازم برای ساختن همه چیز (بخش چهارم)
امبدد لینوکس – قسمت هشتم – 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) و پردازنده| برای جفتشون چهارتا ویژگی رو مشخص کنید و بعد تولچین آماده رو واسه جفتشون پیدا کنید.

 

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

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

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

حمایت از Rich_Dad IRANEMBEDDED

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

Rich_Dad IRANEMBEDDED
Rich_Dad IRANEMBEDDED

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

دیدگاه ها

6 دیدگاه

  • صاحبی
    ۱۹ خرداد ۱۴۰۰

    بر اساس اطلاعات مستند http://dl.linux-sunxi.org/F1C100/Allwinner_F1C100_datasheet_20110331.pdf

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

    • Rich_Dad IRANEMBEDDED
      Rich_Dad
      ۲۱ خرداد ۱۴۰۰

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

  • احسان
    ۱۸ شهریور ۱۳۹۹

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

    • Rich_Dad IRANEMBEDDED
      Rich_Dad
      ۲۵ شهریور ۱۳۹۹

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

  • یحیی نتاج
    ۱۳ شهریور ۱۳۹۹

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

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

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 11 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک