(فصل دوم – بخش دوم)
سلام بر شما. جلسه قبل با تولچین (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 میگن. این حالت کاربردهای خوب زیاد داره ولی یکی از کاربردهای بدش! زمانی هست که یکی بخواد با لینوکس یه تولچین گنو واسه ویندوز بسازه که باش بتونه توی ویندوز با استفاده از ویژوال استادیو برای برد امبدد لینوکسش برنامه نویسی کنه و برنامهها رو کامپایل کنه!!
صد البته آنان که این کار را میکنند، همانا “أَصْحابُ النّارِ هُمْ فِيها خالِدُونَ” هستند!
(حالا چرا کانادایی؟ چون زمانی که همچین مسئلهای پیدا شده بود و بحثش داغ بود و میخواستن روش اسم بذارن کانادا سه تا حزب ملی داشت.)
پایان بخش دوم از فصل دوم.
جر خوردیم از خنده ::))
سلام بر شما
خوشحالیم که این مقاله فنی، باعث شادی دوستان هم شده است ?
گر چه راهیست پر از بیم ز ما تا بر دوست *** رفتن آسان بود ار واقف منزل باشی ?
درود بر شما که مطالبتان واقعا معرکست
فکر میکنم سایت شما بهترین سایت فارسی زبان درزمینه امبدد است
پاینده باشید
سلام آرش جان
خیلی ممنون از اینکه پیگیر موضوع هستید
امیدوارم موفق و سعادتمند باشید
سلام و سپاس از شما
تولچین:
— برد رزبری پای 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
سلام جناب صاحبی
تشکر از توجه و همراهی شما
درود
ممنون از مطالب خوبتون
سلام امین جان
تشکر می کنم
سلام
با تشکر از مطالب ارزنده و وقتی که برای این منظور اختصاص میدین
لینک قسمت بعدی میره قسمت هشتم و هفتم رو رد میکنه
سلام مجتبی جان
تصحیح شد
مهندس این RDA1 چی هست که گفتید؟
سلام بر شما
منظور از RDA1 اولین تمرینی هست که می بایست انجام شود و همان مطالعه فصل اول کتاب THE linux programming interface می باشد. و البته هدف تفهیم UNIX GNU Linux BSD GPL و مابقی مطالب می باشد.
موفق باشید
عالی هست مهندس، خسته نباشید
منتظر ادامه آموزش ها هستیم، پر قدرت ادامه بدید ??
سلام عباس آقای عزیز
تشکر بابت انرژی خوبی که دارید
سلام
مطالب خیلی خوب بود
ممنون از لطف شما
کاش لینک هایی واسه مطالعه بیشتر و همینطور دانلود و تهیه ابزار ها هم میذاشتید تا قبل از تهیه مطالب بعدی ابزار ها رو آماده کنیم
همینطور تکلیف بوردی که آموزش قرار هست بر اساس اون باسه هم روسن کنید عالی میشه
بار هم تشکر میکنم بابت به اشتراک گذاری دانشتون که بسیار ارزشمند است
سلام و تشکر از شما
با توجه در تاخیر در جوابگویی بنده، بخش های مورد نظر شما تعیین تکلیف شده اند
سلام داداش دمت گرم عالی بود ولی اگرسخت افزارت را هم برد نانو لایچی انتخاب کنی که کارت درسته
سلام و تشکر