(فصل دوم – بخش چهارم)
سلام، توی قسمت قبل رابطه بین تولچین و نوع پردازنده رو بررسی کردیم. توی این جلسه میخواهیم کتابخانههای C و ارتباط برنامههای لینوکسی با کرنل رو بررسی کنیم.
در قسمتهای قبلی آموزش، مسیر حرکت و فصلهای پیش رو، بسیاری از مفاهیم مورد نیاز و سؤالها و ابهامات شما در این دوره پاسخ داده شده است.
پس اگر اولین بار است که این آموزش را شروع میکنید، با توجه به سلسله مراتب پیش بینی شده برای آموزشها، بهتر است از جلسه اول شروع کنید!
جلسه اول آموزش، ورود به دنیای امبدد لینوکس
همه آموزشهای امبدد لینوکس
کتابخانه C و کرنل
رابط برنامهنویسی با سیستم عاملهای یونیکسی با زبان C تعریف شده، که الآن با استاندارد POSIX تعریف میشه. کتابخانه C پیاده سازی این رابط و در حقیقت شاهراه ارتباط با کرنل برای برنامههای لینوکسی هست. حتی اگر برنامه شما با زبان دیگری نوشته شده باشد باز هم در زمان اجرا باید از این شاهراه عبور کند.
چندین کتابخانه C برای ارتباط با کرنل داریم الآن، که در زمان کتاب کریم اکثراً نبودن و یه سری چیزهای دیگه بوده که ما کاری به کارشون نداریم چون منسوخ شدن. الآن کریس میگه اینا رو داریم:
glibc: کتابخانه استاندارد گنو هست و از سایتش قابل دسترس هست. از نظر سایز خیلی بزرگه ولی منطبقترین کتابخانه با POSIX API هست.
musl libc: این جدید هست و از اینجا قابل دسترسه. با وجود اینکه جدیده توجه بسیاری رو به خودش جلب کرده نه چون جذابه چون هم سایزش کمه و هم خیلی منطبق با استاندارد هست و جایگزین خوبی هست واسه glibc مخصوصاً اگه مشکلات حافظه داشته باشین.
uClibc-ng: در ابتدا برای میکروکنترلرها یا بهتر بگیم پردازندههایی که Memory Management Unit (MMU) ندارن و از uCLinux استفاده میکنن بود ولی امروزه برای لینوکس کامل هم استفاده میشه. کریس زیاد باش حال نمیکنه ولی پر کاربرد هست هنوزم! از اینجا میتونین بهش دسترسی داشته باشین.
حالا کی از کدوم استفاده کنیم
همه این کتابخانههای C برای ارتباط با کرنل هستند، اما اینکه از کدوم کتابخونه کی و کجا استفاده کنیم، کریس یه حساب کتاب سر انگشتی داده که تو عکس زیر میبینید و توی توضیحات گفته که جاهایی که محدودیت حافظه دارین musl libc بهتر از uClibc-ng هست.
نحوه نامگذاری تولچین گنو (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) و پردازنده| برای جفتشون چهارتا ویژگی رو مشخص کنید و بعد تولچین آماده رو واسه جفتشون پیدا کنید.
پایان بخش چهارم از فصل دوم.
قسمت بعد (قسمت نهم – بخش پنجم این فصل) را از اینجا میتونید مطالعه کنید، اما بهتره قبلش یه سری هم به نظرات این پایین بندازید، نظرات رو بخونید و اگر شما هم نظری دارید، مشارکت کنید!
همه آموزش های امبدد لینوکس