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

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

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

(فصل دوم – بخش دوم)

سلام بر شما. جلسه قبل با تولچین (Toolchain) آشنا شدیم. توی این قسمت میخوایم تولچین گنو یا همون GNU Toolchain رو بررسی کنیم، با اجزاش، انواع مختلفش و نوع نام گذاریش هم آشنا بشیم.

 

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

 

اجزای تولچین گنو

کریس میگه یه تولچین استاندارد گنو از سه تا کامپوننت اصلی تشکیل شده:
اولیش Binutils هست که در واقع یه ست از ابزار‌های باینری مثل اسمبلر و لینکر هست که از این لینک می‌تونین بش دسترسی داشته باشین.
دومیش که احتمال زیاد اسمش رو شنیدید، GNU Compiler Collection (GCC) هست. GCC در حقیقت یه سری کامپایلر‌(ها) ست واسه زبان C و بقیه زبان‌ها که این بقیه زبان‌ها بستگی به نسخه GCC می‌تونه شامل این زبان‌ها باشه:
C++, Objective-C, Objective-C++, Java, Fortran, Ada, Go
همه این کامپایلر‌(ها) از یک بک‌اند (Backend) مشترک استفاده می‌کنن که یه کد واسه اسمبلر گنو تولید می‌کنن.
سومیش C library یا کتابخانه سی هست، که در واقع یه API یا همون Application Program Interface هست که بر اساس POSIX استاندارد شده یا بهتر بگم منطبق هست با ویژگی‌های ذکر شده در استاندارد POSIX که رابط اصلی برنامه‌ها با کرنل سیستم عامل هست.
بچه زرنگ‌ها که می‌دونن POSIX چی هست، چون RDA1 به طور کامل توضیح داده.

(گل همه رنگش خوبه
بچه زرنگش خوبه ?

توی کتابا نوشته تنبلی کار زشته
تنبل همیشه خوابه جاش توی رختخوابه ?
.
.
تا اینجا شاعر خوب اومده بود!!!
یهو بر میگرده به طرز وحشتناکی میگه:
.
.
پاشو پاشو بیدارش کن از رختخواب جداش کن!!!
آخه بگو مگه آزار داری ☹️ . . . !)

همین‌جا بگم که این کتابخانه C چند مدل هست و هر کدوم هم به کاری آید، که بعداً بش خواهیم رسید.
علاوه بر این سه مورد، فایل‌های سرآیند کرنل لینوکس یا Linux Kernel Headers رو هم لازم داریم. این هدرها شامل یه سری تعاریف (Definitions) و یه سری ثابت‌ها (Constants) هستن که در زمان دسترسی مستقیم به کرنل لازم می‌شن.
توی شروع کار که ما هستیم کاربرد این هدرها در کامپایل کردن کتابخانه C هست ولی بعداً هم اگه برنامه‌ای یا کتابخانه‌ای رو بخوایم کامپایل کنیم که به طور مستقیم با کرنل در ارتباط هست مثل همون LED چشمک زن خودمون، بشون نیاز داریم.
علاوه بر این موارد یه مورد دیگه هم هست که خیلی مهم و خیلی پیشرفته هست، و خیلی از افراد اون رو جزئی از تولچین می‌دونن ولی ما فقط اسمش رو بتون میگیم و حالا حالاها سراغ آموزشش نمیریم!
دیباگر گنو یا همون GNU Debugger (GDB) که واسه خیلی‌هاتون شاید آشنا باشه.

 

انواع تولچین گنو (Toolchain)

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

  • زمانی که هر سه یکی باشن یا build == host == target. به این حالت می‌گن native که اکثراً در سیستم‌های دسکتاپ و سرور این مدل تولچین گنو رو داریم. مثلاً کامپایلر ویژوال استادیو روی یه سیستم x86_64 با سیتسم عامل ویندوز کامپایل شده و ما هم داریم روی همچین سیستمی ازش استفاده می‌کنیم.

 

  • زمانی که بیلد و هاست یکی باشن ولی با تارگت فرق کنن یا build == host!= target. به این حالت می‌گن cross که ما برای امبدد لینوکس بیشتر از تولچین‌های این مدلی استفاده می‌کنیم. یعنی روی لینوکس x86_64 تولچین گنو رو می‌سازیم (یا ساختن برامون) و روی همون سیستم ازش استفاده می‌کنیم در نهایت برنامه رو روی یه برد لینوکسی آرم 32 بیتی یا 64 بیتی اجرا می‌کنیم.

 

  • زمانی که هاست و تارگت یکی باشن ولی بیلد فرق کنه یا build!= host == target. به این حالت می‌گن cross-native که اکثراً خوراک دوستان رسپبری باز هست! مثلاً توی سیستم رسپبین شما یک gcc دارید که روی بردتون اجرا میشه و از سورس کدهاتون برنامه اجرایی واسه بردتون می‌سازه. ولی خود این gcc روی یه سیستم لینوکسی x86_64 احتمالاً ساخته شده.

 

  • آخرین حالت زمانی هست که هیچ کدوم با هم برابر نباشن یا build != host != target که بش Canadian یا Canadian Cross میگن. این حالت کاربردهای خوب زیاد داره ولی یکی از کاربردهای بدش! زمانی هست که یکی بخواد با لینوکس یه تولچین گنو واسه ویندوز بسازه که باش بتونه توی ویندوز با استفاده از ویژوال استادیو برای برد امبدد لینوکسش برنامه‌ نویسی کنه و برنامه‌ها رو کامپایل کنه!!
    صد البته آنان که این کار را می‌کنند، همانا “أَصْحابُ النّارِ هُمْ فِيها خالِدُونَ” هستند!
    (حالا چرا کانادایی؟ چون زمانی که همچین مسئله‌ای پیدا شده بود و بحثش داغ بود و می‌خواستن روش اسم بذارن کانادا سه تا حزب ملی داشت.)

 

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

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

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

2 نفر

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

توجه

Rich_Dad IRANEMBEDDED
Rich_Dad IRANEMBEDDED

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

دیدگاه ها

18 دیدگاه

  • Sarah
    ۱۷ شهریور ۱۴۰۱

    جر خوردیم از خنده ::))

    • Rich_Dad IRANEMBEDDED
      Rich_Dad IRANEMBEDDED
      ۱۹ شهریور ۱۴۰۱

      سلام بر شما
      خوشحالیم که این مقاله فنی، باعث شادی دوستان هم شده است ?

      گر چه راهیست پر از بیم ز ما تا بر دوست *** رفتن آسان بود ار واقف منزل باشی ?

  • Arash
    ۳۰ تیر ۱۴۰۰

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

    • Rich_Dad IRANEMBEDDED
      Rich_Dad
      ۳۱ تیر ۱۴۰۰

      سلام آرش جان
      خیلی ممنون از اینکه پیگیر موضوع هستید
      امیدوارم موفق و سعادتمند باشید

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

    سلام و سپاس از شما

    تولچین:
    — برد رزبری پای 3 بی:
    توی انجمن‌ رزبری پای تولچین‌های زیر رو پیشنهاد داده بودن:

    arm-bcm2708hardfp-linux-gnueabi
    arm-bcm2708-linux-gnueabi
    arm-linux-gnueabihf
    arm-rpi-4.9.3-linux-gnueabihf
    gcc-linaro-arm-linux-gnueabihf-raspbian
    gcc-linaro-arm-linux-gnueabihf-raspbian-x64

    نکته: توی نام گذاری تولچین زیاد استاندارد کار نکردن و نتونستم از روی اسم تولچین بیگ یا لیتل ایندین بودن رو تشخیص بدم :d

    توی این لینک روش ایجاد تولچین برای رزپری پای رو آموزش داده (هنوز برد نخریدم، فعلا در حال مطالعه پراکنده هستم)
    https://www.nayab.xyz/rpi3b-elinux/embedded-linux-rpi3-010-toolchain.html

    تولچین ویندوز:
    https://gnutoolchains.com/raspberry

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

      سلام جناب صاحبی
      تشکر از توجه و همراهی شما

  • امین
    ۲۲ فروردین ۱۴۰۰

    درود
    ممنون از مطالب خوبتون

    • Rich_Dad IRANEMBEDDED
      Rich_Dad
      ۶ اردیبهشت ۱۴۰۰

      سلام امین جان
      تشکر می کنم

  • Mojtaba
    ۹ بهمن ۱۳۹۹

    سلام
    با تشکر از مطالب ارزنده و وقتی که برای این منظور اختصاص میدین
    لینک قسمت بعدی میره قسمت هشتم و هفتم رو رد میکنه

    • Rich_Dad IRANEMBEDDED
      Rich_Dad
      ۶ اردیبهشت ۱۴۰۰

      سلام مجتبی جان
      تصحیح شد

  • Mahdi.h  
    Mahdi.h
    ۲۳ مرداد ۱۳۹۹

    مهندس این RDA1 چی هست که گفتید؟

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

      سلام بر شما
      منظور از RDA1 اولین تمرینی هست که می بایست انجام شود و همان مطالعه فصل اول کتاب THE linux programming interface می باشد. و البته هدف تفهیم UNIX GNU Linux BSD GPL و مابقی مطالب می باشد.
      موفق باشید

  • عباس
    ۱۸ مرداد ۱۳۹۹

    عالی هست مهندس، خسته نباشید
    منتظر ادامه آموزش ها هستیم، پر قدرت ادامه بدید ??

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

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

  • احسان
    ۱۶ مرداد ۱۳۹۹

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

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

      سلام و تشکر از شما
      با توجه در تاخیر در جوابگویی بنده، بخش های مورد نظر شما تعیین تکلیف شده اند

  • مهدی
    ۱۶ مرداد ۱۳۹۹

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

پر بحث ترین ها

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

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

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

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

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

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

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

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

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

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

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

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

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

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

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

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

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

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

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

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

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

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

Mahdi.h   Mahdi.h  
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

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

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

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

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