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